diff --git a/.github/workflows/rust-tests.yml b/.github/workflows/rust-tests.yml index c1bea663e..750078f82 100644 --- a/.github/workflows/rust-tests.yml +++ b/.github/workflows/rust-tests.yml @@ -33,6 +33,8 @@ jobs: ] name: Build Cairo programs runs-on: ubuntu-22.04 + env: + MLIR_SYS_160_PREFIX: /usr/lib/llvm-16/ steps: - name: Checkout uses: actions/checkout@v3 @@ -137,6 +139,8 @@ jobs: name: Build with release profile needs: merge-caches runs-on: ubuntu-22.04 + env: + MLIR_SYS_160_PREFIX: /usr/lib/llvm-16/ steps: - name: Install Rust uses: dtolnay/rust-toolchain@stable @@ -146,6 +150,14 @@ jobs: - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true + - name: add llvm deb repository + uses: myci-actions/add-deb-repo@10 + with: + repo: deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main + repo-name: llvm-repo + keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key + - name: Install LLVM + run: sudo apt-get install llvm-16 llvm-16-dev llvm-16-runtime clang-16 clang-tools-16 lld-16 libpolly-16-dev libmlir-16-dev mlir-16-tools - name: Checkout uses: actions/checkout@v3 - name: Fetch programs @@ -162,6 +174,8 @@ jobs: name: Lint with fmt and clippy needs: merge-caches runs-on: ubuntu-22.04 + env: + MLIR_SYS_160_PREFIX: /usr/lib/llvm-16/ steps: - name: Install Rust uses: dtolnay/rust-toolchain@stable @@ -171,6 +185,14 @@ jobs: - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true + - name: add llvm deb repository + uses: myci-actions/add-deb-repo@10 + with: + repo: deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main + repo-name: llvm-repo + keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key + - name: Install LLVM + run: sudo apt-get install llvm-16 llvm-16-dev llvm-16-runtime clang-16 clang-tools-16 lld-16 libpolly-16-dev libmlir-16-dev mlir-16-tools - name: Checkout uses: actions/checkout@v3 - name: Fetch programs @@ -188,6 +210,7 @@ jobs: tests: env: INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }} + MLIR_SYS_160_PREFIX: /usr/lib/llvm-16/ strategy: fail-fast: false matrix: @@ -204,6 +227,14 @@ jobs: - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true + - name: add llvm deb repository + uses: myci-actions/add-deb-repo@10 + with: + repo: deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main + repo-name: llvm-repo + keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key + - name: Install LLVM + run: sudo apt-get install llvm-16 llvm-16-dev llvm-16-runtime clang-16 clang-tools-16 lld-16 libpolly-16-dev libmlir-16-dev mlir-16-tools - name: Checkout uses: actions/checkout@v3 @@ -228,6 +259,8 @@ jobs: needs: merge-caches name: Generate and upload coverage report runs-on: ubuntu-22.04 + env: + MLIR_SYS_160_PREFIX: /usr/lib/llvm-16/ steps: - name: Checkout uses: actions/checkout@v3 @@ -235,6 +268,14 @@ jobs: uses: dtolnay/rust-toolchain@nightly with: toolchain: ${{ env.RUST_TOOLCHAIN }} + - name: add llvm deb repository + uses: myci-actions/add-deb-repo@10 + with: + repo: deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main + repo-name: llvm-repo + keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key + - name: Install LLVM + run: sudo apt-get install llvm-16 llvm-16-dev llvm-16-runtime clang-16 clang-tools-16 lld-16 libpolly-16-dev libmlir-16-dev mlir-16-tools - name: Set nightly as default run: rustup default nightly diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..e32a68edd --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,72 @@ +name: Install dependencies, build the project and run tests from zero + +on: + merge_group: + push: + branches: + - main + pull_request: + branches: + - '**' + +jobs: + fresh_run: + strategy: + fail-fast: false + matrix: + include: + - os: debian-12 + deps_suffix: '' + runs-on: ${{ matrix.os }} + env: + MLIR_SYS_160_PREFIX: /usr/lib/llvm-16/ + name: "Make deps, build & test on fresh ${{ matrix.os }} system" + steps: + - uses: actions/checkout@v3 + + - name: Set RUSTUP_HOME and PATH env vars + if: matrix.os == 'debian-12' + run: | + echo "RUSTUP_HOME=/root/.cargo" >> $GITHUB_ENV + echo "PATH=${PATH}:/root/.cargo/bin" >> $GITHUB_ENV + - name: Install rust + uses: dtolnay/rust-toolchain@stable + + - name: add llvm deb repository + uses: myci-actions/add-deb-repo@10 + with: + repo: deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main + repo-name: llvm-repo + keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key + - name: Install LLVM + run: sudo apt-get install -y llvm-16 llvm-16-dev llvm-16-runtime clang-16 clang-tools-16 lld-16 libpolly-16-dev libmlir-16-dev mlir-16-tools + + - name: Install pyenv + uses: "gabrielfalcao/pyenv-action@v13" + + - name: Run make deps${{ matrix.deps_suffix }} + id: deps + run: make deps${{ matrix.deps_suffix }} + + - name: Run make build + id: build + run: make build + + - name: Run make test + id: test + env: + INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }} + run: | + . starknet-venv/bin/activate; \ + make test + - name: Check which step failed + if: failure() + run: | + if [ ${{ steps.deps.outcome }} = failure ]; then + FAILED_TARGET=deps${{ matrix.deps_suffix }} + elif [ ${{ steps.build.outcome }} = failure ]; then + FAILED_TARGET=build + else + FAILED_TARGET=test + fi + echo "FAILED_TARGET=$FAILED_TARGET" >> $GITHUB_ENV diff --git a/Cargo.lock b/Cargo.lock index 8407c9fe1..7f0c6d661 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -198,7 +198,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -295,6 +295,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + [[package]] name = "anstream" version = "0.5.0" @@ -512,7 +518,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -614,6 +620,29 @@ dependencies = [ "serde", ] +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.31", + "which", +] + [[package]] name = "bit-set" version = "0.5.3" @@ -983,7 +1012,7 @@ checksum = "170838817fc33ddb65e0a9480526df0b226b148a0fca0a5cd7071be4c6683157" dependencies = [ "cairo-lang-debug", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1256,6 +1285,52 @@ dependencies = [ "serde", ] +[[package]] +name = "cairo-native" +version = "0.1.0" +source = "git+https://github.com/lambdaclass/cairo_native?branch=add-execution-result#8f1ae05e53c22ef27e0f085ed3a9081e386842f8" +dependencies = [ + "bumpalo", + "cairo-felt", + "cairo-lang-compiler", + "cairo-lang-defs", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-lowering", + "cairo-lang-sierra", + "cairo-lang-sierra-ap-change", + "cairo-lang-sierra-gas", + "cairo-lang-sierra-generator", + "cairo-lang-utils", + "cairo-native-runtime", + "cc", + "clap", + "id-arena", + "itertools 0.11.0", + "lazy_static", + "libc", + "melior", + "mlir-sys", + "num-bigint", + "serde", + "serde_json", + "thiserror", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "cairo-native-runtime" +version = "0.1.0" +source = "git+https://github.com/lambdaclass/cairo_native?branch=add-execution-result#8f1ae05e53c22ef27e0f085ed3a9081e386842f8" +dependencies = [ + "cairo-felt", + "cairo-lang-runner", + "libc", + "starknet-crypto 0.6.0", + "starknet-curve 0.4.0", +] + [[package]] name = "cairo-vm" version = "0.8.7" @@ -1290,6 +1365,12 @@ dependencies = [ "thiserror-no-std", ] +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cc" version = "1.0.83" @@ -1300,6 +1381,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -1308,9 +1398,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f" +checksum = "d87d9d13be47a5b7c3907137f1290b0459a7f80efb26be8c52afb11963bccb02" dependencies = [ "android-tzdata", "iana-time-zone", @@ -1319,6 +1409,33 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "ciborium" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "cipher" version = "0.4.4" @@ -1329,6 +1446,17 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.4.2" @@ -1360,7 +1488,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1448,6 +1576,76 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools 0.10.5", + "num-traits 0.2.16", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + [[package]] name = "crossbeam-utils" version = "0.8.16" @@ -1465,9 +1663,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ "generic-array", "subtle", @@ -1491,7 +1689,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f34ba9a9bcb8645379e9de8cb3ecfcf4d1c85ba66d90deb3259206fa5aa193b" dependencies = [ "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1548,7 +1746,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1570,7 +1768,20 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core 0.20.3", "quote", - "syn 2.0.29", + "syn 2.0.31", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.0", + "lock_api", + "once_cell", + "parking_lot_core 0.9.8", ] [[package]] @@ -1855,7 +2066,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -1961,6 +2172,12 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + [[package]] name = "good_lp" version = "1.5.0" @@ -1990,6 +2207,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "hashbrown" version = "0.12.3" @@ -2055,6 +2278,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys", +] + [[package]] name = "honggfuzz" version = "0.5.55" @@ -2364,7 +2596,7 @@ dependencies = [ "petgraph", "pico-args", "regex", - "regex-syntax", + "regex-syntax 0.7.5", "string_cache", "term", "tiny-keccak", @@ -2395,12 +2627,28 @@ dependencies = [ "spin", ] +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libc" version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + [[package]] name = "libmimalloc-sys" version = "0.1.34" @@ -2460,6 +2708,15 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "matrixmultiply" version = "0.2.4" @@ -2469,11 +2726,38 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "melior" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80aae50edc07c796ee8a6966b0310df0ac05b52cc046b47dc6692184101e26d5" +dependencies = [ + "criterion", + "dashmap", + "melior-macro", + "mlir-sys", + "once_cell", +] + +[[package]] +name = "melior-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213b66ab6682ae840f203c6996fe3c7f31229a89058e83f211e6690edb497919" +dependencies = [ + "convert_case 0.6.0", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.31", +] + [[package]] name = "memchr" -version = "2.6.2" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memmap2" @@ -2484,6 +2768,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "mimalloc" version = "0.1.38" @@ -2536,6 +2829,15 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "mlir-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1262be288d5f59eaa5a6367722e4fd2eb2f668229d2e3e3680530f266a193b3" +dependencies = [ + "bindgen", +] + [[package]] name = "ndarray" version = "0.13.1" @@ -2565,6 +2867,16 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-bigint" version = "0.4.4" @@ -2643,11 +2955,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "object" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -2664,6 +2986,12 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "parity-scale-codec" version = "3.6.4" @@ -2759,6 +3087,12 @@ dependencies = [ "digest", ] +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "percent-encoding" version = "2.3.0" @@ -2805,7 +3139,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -2850,6 +3184,34 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "num-traits 0.2.16", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -2862,6 +3224,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "prettyplease" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8832c0f9be7e3cae60727e6256cfd2cd3c3e2b6cd5dad4190ecb2fd658c9030b" +dependencies = [ + "proc-macro2", + "syn 2.0.31", +] + [[package]] name = "primitive-types" version = "0.12.1" @@ -2969,6 +3341,28 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -3000,27 +3394,42 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.3.8", + "regex-syntax 0.7.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] name = "regex-automata" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.7.5", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.7.5" @@ -3275,6 +3684,15 @@ dependencies = [ "cipher", ] +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schemars" version = "0.8.13" @@ -3351,7 +3769,7 @@ checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -3460,7 +3878,7 @@ dependencies = [ "darling 0.20.3", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -3472,7 +3890,7 @@ dependencies = [ "darling 0.20.3", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -3507,6 +3925,21 @@ dependencies = [ "keccak", ] +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -3591,7 +4024,7 @@ checksum = "8fcb61961b91757a9bc2d11549067445b2f921bd957f53710db35449767a1ba3" dependencies = [ "starknet-accounts", "starknet-contract", - "starknet-core", + "starknet-core 0.5.1", "starknet-crypto 0.6.0", "starknet-ff", "starknet-macros", @@ -3606,7 +4039,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "111ed887e4db14f0df1f909905e7737e4730770c8ed70997b58a71d5d940daac" dependencies = [ "async-trait", - "starknet-core", + "starknet-core 0.5.1", "starknet-providers", "starknet-signers", "thiserror", @@ -3622,7 +4055,7 @@ dependencies = [ "serde_json", "serde_with 2.3.3", "starknet-accounts", - "starknet-core", + "starknet-core 0.5.1", "starknet-providers", "thiserror", ] @@ -3645,6 +4078,24 @@ dependencies = [ "starknet-ff", ] +[[package]] +name = "starknet-core" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b796a32a7400f7d85e95d3900b5cee7a392b2adbf7ad16093ed45ec6f8d85de6" +dependencies = [ + "base64 0.21.3", + "flate2", + "hex", + "serde", + "serde_json", + "serde_json_pythonic 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_with 2.3.3", + "sha3", + "starknet-crypto 0.6.0", + "starknet-ff", +] + [[package]] name = "starknet-crypto" version = "0.5.1" @@ -3693,7 +4144,7 @@ checksum = "af6527b845423542c8a16e060ea1bc43f67229848e7cd4c4d80be994a84220ce" dependencies = [ "starknet-curve 0.4.0", "starknet-ff", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -3731,12 +4182,12 @@ dependencies = [ [[package]] name = "starknet-macros" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a5865ee0ed22ade86bdf45e7c09c5641f1c59ccae12c21ecde535b2b6bf64a" +checksum = "ef846b6bb48fc8c3e9a2aa9b5b037414f04a908d9db56493a3ae69a857eb2506" dependencies = [ - "starknet-core", - "syn 2.0.29", + "starknet-core 0.6.0", + "syn 2.0.31", ] [[package]] @@ -3754,7 +4205,7 @@ dependencies = [ "serde", "serde_json", "serde_with 2.3.3", - "starknet-core", + "starknet-core 0.5.1", "thiserror", "url", ] @@ -3786,7 +4237,7 @@ dependencies = [ "crypto-bigint", "eth-keystore", "rand", - "starknet-core", + "starknet-core 0.5.1", "starknet-crypto 0.6.0", "thiserror", ] @@ -3821,6 +4272,7 @@ dependencies = [ "cairo-lang-sierra", "cairo-lang-starknet", "cairo-lang-utils", + "cairo-native", "cairo-vm", "coverage-helper", "flate2", @@ -3906,9 +4358,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.29" +version = "2.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" dependencies = [ "proc-macro2", "quote", @@ -3947,22 +4399,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.47" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.47" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -3985,6 +4437,16 @@ dependencies = [ "thiserror-impl-no-std", ] +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "time" version = "0.3.26" @@ -4022,6 +4484,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -4063,7 +4535,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] @@ -4139,9 +4611,21 @@ dependencies = [ "cfg-if", "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + [[package]] name = "tracing-core" version = "0.1.31" @@ -4149,6 +4633,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] @@ -4268,12 +4782,28 @@ dependencies = [ "serde", ] +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -4310,7 +4840,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", "wasm-bindgen-shared", ] @@ -4344,7 +4874,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4380,6 +4910,18 @@ version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" @@ -4396,6 +4938,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -4537,7 +5088,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.31", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b4552d465..60a631d98 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,11 +19,11 @@ starknet_api = "0.4.1" num-traits = "0.2.15" starknet = "0.5.0" thiserror = "1.0.32" -cairo-lang-starknet = "2.1.0-rc4" -cairo-lang-casm = "2.1.0-rc4" -cairo-lang-runner = "2.1.0-rc4" -cairo-lang-sierra = "2.1.0-rc4" -cairo-lang-utils = "2.1.0-rc4" +cairo-lang-starknet = "2.2.0" +cairo-lang-casm = "2.2.0" +cairo-lang-runner = "2.2.0" +cairo-lang-sierra = "2.2.0" +cairo-lang-utils = "2.2.0" [dependencies] cairo-lang-starknet = { workspace = true } @@ -32,6 +32,7 @@ cairo-lang-runner = { workspace = true } cairo-lang-sierra = { workspace = true } cairo-lang-utils = { workspace = true } cairo-vm = { workspace = true, features = ["cairo-1-hints"] } +cairo-native = { git = "https://github.com/lambdaclass/cairo_native", branch="add-execution-result", optional = true} getset = "0.1.2" lazy_static = "1.4.0" num-bigint = { version = "0.4", features = ["serde"] } diff --git a/Makefile b/Makefile index 689a4695b..3728e9fd5 100644 --- a/Makefile +++ b/Makefile @@ -98,7 +98,7 @@ CAIRO_2_COMPILED_SIERRA_CONTRACTS:=$(patsubst $(CAIRO_2_CONTRACTS_TEST_DIR)/%.ca CAIRO_2_COMPILED_CASM_CONTRACTS:= $(patsubst $(CAIRO_2_CONTRACTS_TEST_DIR)/%.sierra, $(CAIRO_2_CONTRACTS_TEST_DIR)/%.casm, $(CAIRO_2_COMPILED_SIERRA_CONTRACTS)) $(CAIRO_2_CONTRACTS_TEST_DIR)/%.sierra: $(CAIRO_2_CONTRACTS_TEST_DIR)/%.cairo - $(STARKNET_COMPILE_CAIRO_2) $< $@ + $(STARKNET_COMPILE_CAIRO_2) --single-file $< $@ --replace-ids $(CAIRO_2_CONTRACTS_TEST_DIR)/%.casm: $(CAIRO_2_CONTRACTS_TEST_DIR)/%.sierra $(STARKNET_SIERRA_COMPILE_CAIRO_2) --add-pythonic-hints $< $@ @@ -107,7 +107,7 @@ compile-cairo-2-sierra: $(CAIRO_2_COMPILED_SIERRA_CONTRACTS) compile-cairo-2-casm: $(CAIRO_2_COMPILED_CASM_CONTRACTS) -CAIRO_2_VERSION=2.0.1 +CAIRO_2_VERSION=2.2.0 cairo-repo-2-dir = cairo2 cairo-repo-2-dir-macos = cairo2-macos @@ -147,6 +147,8 @@ check: compile-cairo compile-starknet deps: check-python-version build-cairo-2-compiler build-cairo-1-compiler cargo install flamegraph --version 0.6.2 cargo install cargo-llvm-cov --version 0.5.14 + pyenv install -s pypy3.9-7.3.9 + pyenv install -s 3.9.15 python3.9 -m venv starknet-venv . starknet-venv/bin/activate && $(MAKE) deps-venv cargo install cargo-nextest --version 0.9.49 @@ -186,7 +188,7 @@ test-cairo-1: cargo nextest run --workspace --all-targets --features=cairo_1_tests test-cairo-2: - cargo nextest run --workspace --all-targets + cargo nextest run --workspace --all-targets --features=cairo-native test-doctests: cargo test --workspace --doc diff --git a/README.md b/README.md index 1b754db81..ce9b4938a 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,22 @@ In Mac you'll also need to tell the script where to find the gmp lib: export CFLAGS=-I/opt/homebrew/opt/gmp/include LDFLAGS=-L/opt/homebrew/opt/gmp/lib ``` - +### Cairo Native support + +Starknet in Rust can be integrated with [Cairo Native](https://github.com/lambdaclass/cairo_native), which makes the execution of sierra programs possible through native machine code. To use it, the following needs to be setup: + +- Rust needs to be switched to its `nightly` version by running + ``` + rustup default nightly + ``` +- LLVM `16` needs to be installed and the `MLIR_SYS_160_PREFIX` environment variable needs to point to said installation. In macOS, run + ``` + brew install llvm@16 + export MLIR_SYS_160_PREFIX=/opt/homebrew/opt/llvm@16 + ``` + and you're set. + +Afterwards, compiling with the feature flag `cairo-native` will enable native execution. You can check out some example test code that uses it under `tests/cairo_native.rs`. ## 🚀 Usage diff --git a/cairo_programs/erc20.sierra b/cairo_programs/erc20.sierra new file mode 100644 index 000000000..d7a57bf24 --- /dev/null +++ b/cairo_programs/erc20.sierra @@ -0,0 +1,5012 @@ +type RangeCheck = RangeCheck; +type GasBuiltin = GasBuiltin; +type felt252 = felt252; +type Array = Array; +type Snapshot> = Snapshot>; +type core::array::Span:: = Struct>>; +type u32 = u32; +type core::panics::Panic = Struct; +type Tuple> = Struct>; +type Tuple> = Struct>; +type core::panics::PanicResult::<(core::array::Span::,)> = Enum>, Tuple>>; +type System = System; +type BuiltinCosts = BuiltinCosts; +type erc20::erc20::erc_20::name::ContractState = Struct; +type erc20::erc20::erc_20::symbol::ContractState = Struct; +type erc20::erc20::erc_20::decimals::ContractState = Struct; +type erc20::erc20::erc_20::total_supply::ContractState = Struct; +type erc20::erc20::erc_20::balances::ContractState = Struct; +type erc20::erc20::erc_20::allowances::ContractState = Struct; +type erc20::erc20::erc_20::ContractState = Struct; +type Tuple = Struct; +type core::panics::PanicResult::<(core::felt252,)> = Enum, Tuple>>; +type Unit = Struct; +type u8 = u8; +type Tuple = Struct; +type core::panics::PanicResult::<(core::integer::u8,)> = Enum, Tuple>>; +type u128 = u128; +type core::integer::u256 = Struct; +type Tuple = Struct; +type core::panics::PanicResult::<(core::integer::u256,)> = Enum, Tuple>>; +type ContractAddress = ContractAddress; +type core::option::Option:: = Enum; +type Pedersen = Pedersen; +type core::option::Option:: = Enum; +type Tuple = Struct; +type core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())> = Enum, Tuple>>; +type core::option::Option:: = Enum; +type core::option::Option:: = Enum; +type Tuple = Struct; +type core::option::Option:: = Enum; +type Tuple = Struct; +type core::panics::PanicResult::<(core::starknet::contract_address::ContractAddress,)> = Enum, Tuple>>; +type Box = Box; +type core::option::Option::> = Enum, Unit>; +type Tuple = Struct; +type core::panics::PanicResult::<(erc20::erc20::erc_20::name::ContractState, ())> = Enum, Tuple>>; +type Tuple = Struct; +type core::panics::PanicResult::<(erc20::erc20::erc_20::symbol::ContractState, ())> = Enum, Tuple>>; +type Tuple = Struct; +type core::panics::PanicResult::<(erc20::erc20::erc_20::decimals::ContractState, ())> = Enum, Tuple>>; +type NonZero = NonZero; +type core::bool = Enum; +type Tuple = Struct; +type core::panics::PanicResult::<(erc20::erc20::erc_20::total_supply::ContractState, ())> = Enum, Tuple>>; +type Tuple = Struct; +type core::panics::PanicResult::<(erc20::erc20::erc_20::balances::ContractState, ())> = Enum, Tuple>>; +type erc20::erc20::erc_20::Transfer = Struct; +type erc20::erc20::erc_20::Approval = Struct; +type erc20::erc20::erc_20::Event = Enum; +type StorageBaseAddress = StorageBaseAddress; +type StorageAddress = StorageAddress; +type core::result::Result::> = Enum>; +type core::result::Result::> = Enum>; +type Tuple>> = Struct>>; +type core::panics::PanicResult::<(core::result::Result::>,)> = Enum>>, Tuple>>; +type core::result::Result::> = Enum>; +type Tuple>> = Struct>>; +type core::panics::PanicResult::<(core::result::Result::>,)> = Enum>>, Tuple>>; +type u64 = u64; +type core::starknet::info::BlockInfo = Struct; +type Box = Box; +type core::starknet::info::TxInfo = Struct, felt252, felt252, felt252>; +type Box = Box; +type core::starknet::info::ExecutionInfo = Struct, Box, ContractAddress, ContractAddress, felt252>; +type Box = Box; +type Tuple> = Struct>; +type core::panics::PanicResult::<(core::box::Box::,)> = Enum>, Tuple>>; +type Tuple = Struct; +type core::panics::PanicResult::<(erc20::erc20::erc_20::allowances::ContractState, ())> = Enum, Tuple>>; +type core::result::Result::<(), core::array::Array::> = Enum>; +type Tuple = Struct; +type core::panics::PanicResult::<((),)> = Enum, Tuple>>; +type core::result::Result::> = Enum>; +type Tuple>> = Struct>>; +type core::panics::PanicResult::<(core::result::Result::>,)> = Enum>>, Tuple>>; +type core::result::Result::, core::array::Array::> = Enum, Array>; +type Tuple = Struct; +type Tuple = Struct; + +libfunc revoke_ap_tracking = revoke_ap_tracking; +libfunc withdraw_gas = withdraw_gas; +libfunc branch_align = branch_align; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc array_len = array_len; +libfunc snapshot_take = snapshot_take; +libfunc drop = drop; +libfunc u32_const<0> = u32_const<0>; +libfunc rename = rename; +libfunc store_temp = store_temp; +libfunc store_temp = store_temp; +libfunc u32_eq = u32_eq; +libfunc array_new = array_new; +libfunc felt252_const<7733229381460288120802334208475838166080759535023995805565484692595> = felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>; +libfunc store_temp = store_temp; +libfunc array_append = array_append; +libfunc struct_construct = struct_construct; +libfunc struct_construct>> = struct_construct>>; +libfunc enum_init,)>, 1> = enum_init,)>, 1>; +libfunc store_temp = store_temp; +libfunc store_temp = store_temp; +libfunc store_temp,)>> = store_temp,)>>; +libfunc get_builtin_costs = get_builtin_costs; +libfunc store_temp = store_temp; +libfunc withdraw_gas_all = withdraw_gas_all; +libfunc struct_construct = struct_construct; +libfunc struct_construct = struct_construct; +libfunc struct_construct = struct_construct; +libfunc struct_construct = struct_construct; +libfunc struct_construct = struct_construct; +libfunc struct_construct = struct_construct; +libfunc struct_construct = struct_construct; +libfunc snapshot_take = snapshot_take; +libfunc drop = drop; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc snapshot_take = snapshot_take; +libfunc drop = drop; +libfunc store_temp> = store_temp>; +libfunc function_call = function_call; +libfunc drop = drop; +libfunc snapshot_take> = snapshot_take>; +libfunc drop> = drop>; +libfunc struct_construct> = struct_construct>; +libfunc struct_construct>> = struct_construct>>; +libfunc enum_init,)>, 0> = enum_init,)>, 0>; +libfunc felt252_const<375233589013918064796019> = felt252_const<375233589013918064796019>; +libfunc drop> = drop>; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc snapshot_take = snapshot_take; +libfunc drop = drop; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc snapshot_take = snapshot_take; +libfunc drop = drop; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc store_temp> = store_temp>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc drop = drop; +libfunc store_temp = store_temp; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913> = felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>; +libfunc function_call = function_call; +libfunc felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914> = felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc drop> = drop>; +libfunc function_call = function_call; +libfunc felt252_const<485748461484230571791265682659113160264223489397539653310998840191492915> = felt252_const<485748461484230571791265682659113160264223489397539653310998840191492915>; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc function_call = function_call; +libfunc felt252_const<485748461484230571791265682659113160264223489397539653310998840191492917> = felt252_const<485748461484230571791265682659113160264223489397539653310998840191492917>; +libfunc felt252_const<485748461484230571791265682659113160264223489397539653310998840191492916> = felt252_const<485748461484230571791265682659113160264223489397539653310998840191492916>; +libfunc struct_deconstruct = struct_deconstruct; +libfunc drop = drop; +libfunc drop = drop; +libfunc drop = drop; +libfunc drop = drop; +libfunc drop = drop; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc rename = rename; +libfunc struct_construct = struct_construct; +libfunc store_temp = store_temp; +libfunc drop = drop; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc rename = rename; +libfunc u8_to_felt252 = u8_to_felt252; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc dup = dup; +libfunc struct_deconstruct = struct_deconstruct; +libfunc drop = drop; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc rename> = rename>; +libfunc rename = rename; +libfunc contract_address_try_from_felt252 = contract_address_try_from_felt252; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc struct_construct> = struct_construct>; +libfunc store_temp = store_temp; +libfunc store_temp> = store_temp>; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc struct_construct = struct_construct; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc function_call = function_call; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc dup = dup; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc snapshot_take = snapshot_take; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc array_snapshot_pop_front = array_snapshot_pop_front; +libfunc enum_init>, 0> = enum_init>, 0>; +libfunc store_temp>> = store_temp>>; +libfunc store_temp>> = store_temp>>; +libfunc jump = jump; +libfunc enum_init>, 1> = enum_init>, 1>; +libfunc enum_match>> = enum_match>>; +libfunc unbox = unbox; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc function_call = function_call; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc contract_address_to_felt252 = contract_address_to_felt252; +libfunc felt252_const<0> = felt252_const<0>; +libfunc felt252_sub = felt252_sub; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc felt252_is_zero = felt252_is_zero; +libfunc enum_init = enum_init; +libfunc store_temp = store_temp; +libfunc drop> = drop>; +libfunc enum_init = enum_init; +libfunc bool_not_impl = bool_not_impl; +libfunc enum_match = enum_match; +libfunc felt252_const<7300388948442106731950660484798539862217172507820428101544021685107> = felt252_const<7300388948442106731950660484798539862217172507820428101544021685107>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc contract_address_const<0> = contract_address_const<0>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_construct = struct_construct; +libfunc enum_init = enum_init; +libfunc store_temp = store_temp; +libfunc function_call>> = function_call>>; +libfunc drop> = drop>; +libfunc drop> = drop>; +libfunc drop> = drop>; +libfunc storage_base_address_const<1528802474226268325865027367859591458315299653151958663884057507666229546336> = storage_base_address_const<1528802474226268325865027367859591458315299653151958663884057507666229546336>; +libfunc storage_address_from_base = storage_address_from_base; +libfunc store_temp = store_temp; +libfunc storage_read_syscall = storage_read_syscall; +libfunc enum_init>, 0> = enum_init>, 0>; +libfunc store_temp>> = store_temp>>; +libfunc enum_init>, 1> = enum_init>, 1>; +libfunc rename>> = rename>>; +libfunc function_call::unwrap_syscall> = function_call::unwrap_syscall>; +libfunc storage_base_address_const<944713526212149105522785400348068751682982210605126537021911324578866405028> = storage_base_address_const<944713526212149105522785400348068751682982210605126537021911324578866405028>; +libfunc storage_base_address_const<134830404806214277570220174593674215737759987247891306080029841794115377321> = storage_base_address_const<134830404806214277570220174593674215737759987247891306080029841794115377321>; +libfunc store_temp = store_temp; +libfunc function_call = function_call; +libfunc enum_match>,)>> = enum_match>,)>>; +libfunc struct_deconstruct>>> = struct_deconstruct>>>; +libfunc store_temp>> = store_temp>>; +libfunc function_call::unwrap_syscall> = function_call::unwrap_syscall>; +libfunc storage_base_address_const<603278275252936218847294002513349627170936020082667936993356353388973422646> = storage_base_address_const<603278275252936218847294002513349627170936020082667936993356353388973422646>; +libfunc function_call = function_call; +libfunc enum_match>,)>> = enum_match>,)>>; +libfunc struct_deconstruct>>> = struct_deconstruct>>>; +libfunc store_temp>> = store_temp>>; +libfunc function_call::unwrap_syscall> = function_call::unwrap_syscall>; +libfunc rename = rename; +libfunc u128_to_felt252 = u128_to_felt252; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc function_call = function_call; +libfunc enum_match,)>> = enum_match,)>>; +libfunc struct_deconstruct>> = struct_deconstruct>>; +libfunc unbox = unbox; +libfunc struct_deconstruct = struct_deconstruct; +libfunc drop> = drop>; +libfunc drop> = drop>; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc felt252_const<25936191677694277552149992725516921697451103245639728> = felt252_const<25936191677694277552149992725516921697451103245639728>; +libfunc felt252_const<395754877894504967531585582359572169455970492464> = felt252_const<395754877894504967531585582359572169455970492464>; +libfunc snapshot_take = snapshot_take; +libfunc store_temp = store_temp; +libfunc function_call> = function_call>; +libfunc u128_const<340282366920938463463374607431768211455> = u128_const<340282366920938463463374607431768211455>; +libfunc snapshot_take = snapshot_take; +libfunc u128_eq = u128_eq; +libfunc felt252_const<101313248740993271302566317381896466254801065025584> = felt252_const<101313248740993271302566317381896466254801065025584>; +libfunc function_call = function_call; +libfunc enum_match> = enum_match>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_construct = struct_construct; +libfunc store_temp = store_temp; +libfunc function_call> = function_call>; +libfunc function_call = function_call; +libfunc felt252_const<39879774624079483812136948410799859986295> = felt252_const<39879774624079483812136948410799859986295>; +libfunc function_call = function_call; +libfunc felt252_const<39879774624085075084607933104993585622903> = felt252_const<39879774624085075084607933104993585622903>; +libfunc u8_try_from_felt252 = u8_try_from_felt252; +libfunc rename = rename; +libfunc rename> = rename>; +libfunc snapshot_take = snapshot_take; +libfunc storage_write_syscall = storage_write_syscall; +libfunc enum_init>, 0> = enum_init>, 0>; +libfunc store_temp>> = store_temp>>; +libfunc enum_init>, 1> = enum_init>, 1>; +libfunc rename>> = rename>>; +libfunc function_call::unwrap_syscall> = function_call::unwrap_syscall>; +libfunc enum_match> = enum_match>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc snapshot_take = snapshot_take; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc snapshot_take = snapshot_take; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc function_call = function_call; +libfunc snapshot_take = snapshot_take; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc function_call::into> = function_call::into>; +libfunc snapshot_take = snapshot_take; +libfunc drop = drop; +libfunc function_call = function_call; +libfunc emit_event_syscall = emit_event_syscall; +libfunc enum_match>> = enum_match>>; +libfunc enum_init>, 0> = enum_init>, 0>; +libfunc struct_construct>>> = struct_construct>>>; +libfunc enum_init>,)>, 0> = enum_init>,)>, 0>; +libfunc store_temp>,)>> = store_temp>,)>>; +libfunc felt252_const<110930490496575599150170734222081291576> = felt252_const<110930490496575599150170734222081291576>; +libfunc enum_init>,)>, 1> = enum_init>,)>, 1>; +libfunc enum_init>, 1> = enum_init>, 1>; +libfunc enum_match>> = enum_match>>; +libfunc dup = dup; +libfunc dup = dup; +libfunc function_call = function_call; +libfunc enum_match>,)>> = enum_match>,)>>; +libfunc struct_deconstruct>>> = struct_deconstruct>>>; +libfunc enum_match>> = enum_match>>; +libfunc u8_const<1> = u8_const<1>; +libfunc storage_address_from_base_and_offset = storage_address_from_base_and_offset; +libfunc enum_init>, 0> = enum_init>, 0>; +libfunc struct_construct>>> = struct_construct>>>; +libfunc enum_init>,)>, 0> = enum_init>,)>, 0>; +libfunc store_temp>,)>> = store_temp>,)>>; +libfunc felt252_const<476442828812030857794232422692155113556837216824> = felt252_const<476442828812030857794232422692155113556837216824>; +libfunc enum_init>,)>, 1> = enum_init>,)>, 1>; +libfunc enum_init>, 1> = enum_init>, 1>; +libfunc drop = drop; +libfunc enum_match>> = enum_match>>; +libfunc felt252_const<1065622543624526936256554561967983185612257046533136611876836524258158810564> = felt252_const<1065622543624526936256554561967983185612257046533136611876836524258158810564>; +libfunc function_call = function_call; +libfunc storage_base_address_from_felt252 = storage_base_address_from_felt252; +libfunc felt252_const<337994139936370667767799129369552596157394447336989834104582481799883947719> = felt252_const<337994139936370667767799129369552596157394447336989834104582481799883947719>; +libfunc function_call::hash> = function_call::hash>; +libfunc u128s_from_felt252 = u128s_from_felt252; +libfunc rename> = rename>; +libfunc get_execution_info_syscall = get_execution_info_syscall; +libfunc enum_init, core::array::Array::>, 0> = enum_init, core::array::Array::>, 0>; +libfunc store_temp, core::array::Array::>> = store_temp, core::array::Array::>>; +libfunc enum_init, core::array::Array::>, 1> = enum_init, core::array::Array::>, 1>; +libfunc rename, core::array::Array::>> = rename, core::array::Array::>>; +libfunc function_call>::unwrap_syscall> = function_call>::unwrap_syscall>; +libfunc struct_construct>> = struct_construct>>; +libfunc enum_init,)>, 0> = enum_init,)>, 0>; +libfunc store_temp,)>> = store_temp,)>>; +libfunc enum_init,)>, 1> = enum_init,)>, 1>; +libfunc function_call = function_call; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc function_call = function_call; +libfunc function_call = function_call; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc function_call = function_call; +libfunc enum_match>> = enum_match>>; +libfunc struct_construct> = struct_construct>; +libfunc enum_init, 0> = enum_init, 0>; +libfunc store_temp> = store_temp>; +libfunc enum_init, 1> = enum_init, 1>; +libfunc enum_match = enum_match; +libfunc felt252_const<271746229759260285552388728919865295615886751538523744128730118297934206697> = felt252_const<271746229759260285552388728919865295615886751538523744128730118297934206697>; +libfunc function_call = function_call; +libfunc felt252_const<544914742286571513055574265148471203182105283038408585630116262969508767999> = felt252_const<544914742286571513055574265148471203182105283038408585630116262969508767999>; +libfunc function_call = function_call; +libfunc enum_init>, 0> = enum_init>, 0>; +libfunc struct_construct>>> = struct_construct>>>; +libfunc enum_init>,)>, 0> = enum_init>,)>, 0>; +libfunc store_temp>,)>> = store_temp>,)>>; +libfunc enum_init>,)>, 1> = enum_init>,)>, 1>; +libfunc enum_init>, 1> = enum_init>, 1>; +libfunc pedersen = pedersen; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc rename = rename; +libfunc enum_match, core::array::Array::>> = enum_match, core::array::Array::>>; +libfunc enum_init = enum_init; +libfunc u128_overflowing_add = u128_overflowing_add; +libfunc struct_construct> = struct_construct>; +libfunc store_temp> = store_temp>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc struct_construct> = struct_construct>; +libfunc store_temp> = store_temp>; +libfunc u128_const<1> = u128_const<1>; +libfunc drop = drop; +libfunc rename> = rename>; +libfunc u128_overflowing_sub = u128_overflowing_sub; +libfunc dup = dup; +libfunc struct_deconstruct = struct_deconstruct; +libfunc function_call = function_call; +libfunc dup = dup; +libfunc struct_deconstruct = struct_deconstruct; +libfunc rename = rename; + +revoke_ap_tracking() -> (); +withdraw_gas([0], [1]) { fallthrough([4], [5]) 87([6], [7]) }; +branch_align() -> (); +struct_deconstruct>([3]) -> ([8]); +array_len([8]) -> ([9]); +snapshot_take([9]) -> ([10], [11]); +drop([10]) -> (); +u32_const<0>() -> ([12]); +snapshot_take([12]) -> ([13], [14]); +drop([13]) -> (); +rename([11]) -> ([15]); +rename([14]) -> ([16]); +store_temp([15]) -> ([15]); +store_temp([4]) -> ([4]); +u32_eq([15], [16]) { fallthrough() 28() }; +branch_align() -> (); +array_new() -> ([17]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([18]); +store_temp([18]) -> ([18]); +array_append([17], [18]) -> ([19]); +struct_construct() -> ([20]); +struct_construct>>([20], [19]) -> ([21]); +enum_init,)>, 1>([21]) -> ([22]); +store_temp([4]) -> ([23]); +store_temp([5]) -> ([24]); +store_temp([2]) -> ([25]); +store_temp,)>>([22]) -> ([26]); +return([23], [24], [25], [26]); +branch_align() -> (); +get_builtin_costs() -> ([27]); +store_temp([27]) -> ([27]); +withdraw_gas_all([4], [5], [27]) { fallthrough([28], [29]) 74([30], [31]) }; +branch_align() -> (); +struct_construct() -> ([32]); +struct_construct() -> ([33]); +struct_construct() -> ([34]); +struct_construct() -> ([35]); +struct_construct() -> ([36]); +struct_construct() -> ([37]); +struct_construct([32], [33], [34], [35], [36], [37]) -> ([38]); +snapshot_take([38]) -> ([39], [40]); +drop([39]) -> (); +store_temp([29]) -> ([44]); +store_temp([2]) -> ([45]); +store_temp([40]) -> ([46]); +function_call([44], [45], [46]) -> ([41], [42], [43]); +store_temp([28]) -> ([28]); +enum_match>([43]) { fallthrough([47]) 67([48]) }; +branch_align() -> (); +array_new() -> ([49]); +struct_deconstruct>([47]) -> ([50]); +snapshot_take([50]) -> ([51], [52]); +drop([51]) -> (); +store_temp([52]) -> ([55]); +store_temp>([49]) -> ([56]); +function_call([55], [56]) -> ([53], [54]); +drop([54]) -> (); +snapshot_take>([53]) -> ([57], [58]); +drop>([57]) -> (); +struct_construct>([58]) -> ([59]); +struct_construct>>([59]) -> ([60]); +enum_init,)>, 0>([60]) -> ([61]); +store_temp([28]) -> ([62]); +store_temp([41]) -> ([63]); +store_temp([42]) -> ([64]); +store_temp,)>>([61]) -> ([65]); +return([62], [63], [64], [65]); +branch_align() -> (); +enum_init,)>, 1>([48]) -> ([66]); +store_temp([28]) -> ([67]); +store_temp([41]) -> ([68]); +store_temp([42]) -> ([69]); +store_temp,)>>([66]) -> ([70]); +return([67], [68], [69], [70]); +branch_align() -> (); +array_new() -> ([71]); +felt252_const<375233589013918064796019>() -> ([72]); +store_temp([72]) -> ([72]); +array_append([71], [72]) -> ([73]); +struct_construct() -> ([74]); +struct_construct>>([74], [73]) -> ([75]); +enum_init,)>, 1>([75]) -> ([76]); +store_temp([30]) -> ([77]); +store_temp([31]) -> ([78]); +store_temp([2]) -> ([79]); +store_temp,)>>([76]) -> ([80]); +return([77], [78], [79], [80]); +branch_align() -> (); +drop>([3]) -> (); +array_new() -> ([81]); +felt252_const<375233589013918064796019>() -> ([82]); +store_temp([82]) -> ([82]); +array_append([81], [82]) -> ([83]); +struct_construct() -> ([84]); +struct_construct>>([84], [83]) -> ([85]); +enum_init,)>, 1>([85]) -> ([86]); +store_temp([6]) -> ([87]); +store_temp([7]) -> ([88]); +store_temp([2]) -> ([89]); +store_temp,)>>([86]) -> ([90]); +return([87], [88], [89], [90]); +revoke_ap_tracking() -> (); +withdraw_gas([0], [1]) { fallthrough([4], [5]) 188([6], [7]) }; +branch_align() -> (); +struct_deconstruct>([3]) -> ([8]); +array_len([8]) -> ([9]); +snapshot_take([9]) -> ([10], [11]); +drop([10]) -> (); +u32_const<0>() -> ([12]); +snapshot_take([12]) -> ([13], [14]); +drop([13]) -> (); +rename([11]) -> ([15]); +rename([14]) -> ([16]); +store_temp([15]) -> ([15]); +store_temp([4]) -> ([4]); +u32_eq([15], [16]) { fallthrough() 129() }; +branch_align() -> (); +array_new() -> ([17]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([18]); +store_temp([18]) -> ([18]); +array_append([17], [18]) -> ([19]); +struct_construct() -> ([20]); +struct_construct>>([20], [19]) -> ([21]); +enum_init,)>, 1>([21]) -> ([22]); +store_temp([4]) -> ([23]); +store_temp([5]) -> ([24]); +store_temp([2]) -> ([25]); +store_temp,)>>([22]) -> ([26]); +return([23], [24], [25], [26]); +branch_align() -> (); +get_builtin_costs() -> ([27]); +store_temp([27]) -> ([27]); +withdraw_gas_all([4], [5], [27]) { fallthrough([28], [29]) 175([30], [31]) }; +branch_align() -> (); +struct_construct() -> ([32]); +struct_construct() -> ([33]); +struct_construct() -> ([34]); +struct_construct() -> ([35]); +struct_construct() -> ([36]); +struct_construct() -> ([37]); +struct_construct([32], [33], [34], [35], [36], [37]) -> ([38]); +snapshot_take([38]) -> ([39], [40]); +drop([39]) -> (); +store_temp([29]) -> ([44]); +store_temp([2]) -> ([45]); +store_temp([40]) -> ([46]); +function_call([44], [45], [46]) -> ([41], [42], [43]); +store_temp([28]) -> ([28]); +enum_match>([43]) { fallthrough([47]) 168([48]) }; +branch_align() -> (); +array_new() -> ([49]); +struct_deconstruct>([47]) -> ([50]); +snapshot_take([50]) -> ([51], [52]); +drop([51]) -> (); +store_temp([52]) -> ([55]); +store_temp>([49]) -> ([56]); +function_call([55], [56]) -> ([53], [54]); +drop([54]) -> (); +snapshot_take>([53]) -> ([57], [58]); +drop>([57]) -> (); +struct_construct>([58]) -> ([59]); +struct_construct>>([59]) -> ([60]); +enum_init,)>, 0>([60]) -> ([61]); +store_temp([28]) -> ([62]); +store_temp([41]) -> ([63]); +store_temp([42]) -> ([64]); +store_temp,)>>([61]) -> ([65]); +return([62], [63], [64], [65]); +branch_align() -> (); +enum_init,)>, 1>([48]) -> ([66]); +store_temp([28]) -> ([67]); +store_temp([41]) -> ([68]); +store_temp([42]) -> ([69]); +store_temp,)>>([66]) -> ([70]); +return([67], [68], [69], [70]); +branch_align() -> (); +array_new() -> ([71]); +felt252_const<375233589013918064796019>() -> ([72]); +store_temp([72]) -> ([72]); +array_append([71], [72]) -> ([73]); +struct_construct() -> ([74]); +struct_construct>>([74], [73]) -> ([75]); +enum_init,)>, 1>([75]) -> ([76]); +store_temp([30]) -> ([77]); +store_temp([31]) -> ([78]); +store_temp([2]) -> ([79]); +store_temp,)>>([76]) -> ([80]); +return([77], [78], [79], [80]); +branch_align() -> (); +drop>([3]) -> (); +array_new() -> ([81]); +felt252_const<375233589013918064796019>() -> ([82]); +store_temp([82]) -> ([82]); +array_append([81], [82]) -> ([83]); +struct_construct() -> ([84]); +struct_construct>>([84], [83]) -> ([85]); +enum_init,)>, 1>([85]) -> ([86]); +store_temp([6]) -> ([87]); +store_temp([7]) -> ([88]); +store_temp([2]) -> ([89]); +store_temp,)>>([86]) -> ([90]); +return([87], [88], [89], [90]); +revoke_ap_tracking() -> (); +withdraw_gas([0], [1]) { fallthrough([4], [5]) 289([6], [7]) }; +branch_align() -> (); +struct_deconstruct>([3]) -> ([8]); +array_len([8]) -> ([9]); +snapshot_take([9]) -> ([10], [11]); +drop([10]) -> (); +u32_const<0>() -> ([12]); +snapshot_take([12]) -> ([13], [14]); +drop([13]) -> (); +rename([11]) -> ([15]); +rename([14]) -> ([16]); +store_temp([15]) -> ([15]); +store_temp([4]) -> ([4]); +u32_eq([15], [16]) { fallthrough() 230() }; +branch_align() -> (); +array_new() -> ([17]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([18]); +store_temp([18]) -> ([18]); +array_append([17], [18]) -> ([19]); +struct_construct() -> ([20]); +struct_construct>>([20], [19]) -> ([21]); +enum_init,)>, 1>([21]) -> ([22]); +store_temp([4]) -> ([23]); +store_temp([5]) -> ([24]); +store_temp([2]) -> ([25]); +store_temp,)>>([22]) -> ([26]); +return([23], [24], [25], [26]); +branch_align() -> (); +get_builtin_costs() -> ([27]); +store_temp([27]) -> ([27]); +withdraw_gas_all([4], [5], [27]) { fallthrough([28], [29]) 276([30], [31]) }; +branch_align() -> (); +struct_construct() -> ([32]); +struct_construct() -> ([33]); +struct_construct() -> ([34]); +struct_construct() -> ([35]); +struct_construct() -> ([36]); +struct_construct() -> ([37]); +struct_construct([32], [33], [34], [35], [36], [37]) -> ([38]); +snapshot_take([38]) -> ([39], [40]); +drop([39]) -> (); +store_temp([28]) -> ([45]); +store_temp([29]) -> ([46]); +store_temp([2]) -> ([47]); +store_temp([40]) -> ([48]); +function_call([45], [46], [47], [48]) -> ([41], [42], [43], [44]); +enum_match>([44]) { fallthrough([49]) 269([50]) }; +branch_align() -> (); +array_new() -> ([51]); +struct_deconstruct>([49]) -> ([52]); +snapshot_take([52]) -> ([53], [54]); +drop([53]) -> (); +store_temp([54]) -> ([57]); +store_temp>([51]) -> ([58]); +function_call([57], [58]) -> ([55], [56]); +drop([56]) -> (); +snapshot_take>([55]) -> ([59], [60]); +drop>([59]) -> (); +struct_construct>([60]) -> ([61]); +struct_construct>>([61]) -> ([62]); +enum_init,)>, 0>([62]) -> ([63]); +store_temp([41]) -> ([64]); +store_temp([42]) -> ([65]); +store_temp([43]) -> ([66]); +store_temp,)>>([63]) -> ([67]); +return([64], [65], [66], [67]); +branch_align() -> (); +enum_init,)>, 1>([50]) -> ([68]); +store_temp([41]) -> ([69]); +store_temp([42]) -> ([70]); +store_temp([43]) -> ([71]); +store_temp,)>>([68]) -> ([72]); +return([69], [70], [71], [72]); +branch_align() -> (); +array_new() -> ([73]); +felt252_const<375233589013918064796019>() -> ([74]); +store_temp([74]) -> ([74]); +array_append([73], [74]) -> ([75]); +struct_construct() -> ([76]); +struct_construct>>([76], [75]) -> ([77]); +enum_init,)>, 1>([77]) -> ([78]); +store_temp([30]) -> ([79]); +store_temp([31]) -> ([80]); +store_temp([2]) -> ([81]); +store_temp,)>>([78]) -> ([82]); +return([79], [80], [81], [82]); +branch_align() -> (); +drop>([3]) -> (); +array_new() -> ([83]); +felt252_const<375233589013918064796019>() -> ([84]); +store_temp([84]) -> ([84]); +array_append([83], [84]) -> ([85]); +struct_construct() -> ([86]); +struct_construct>>([86], [85]) -> ([87]); +enum_init,)>, 1>([87]) -> ([88]); +store_temp([6]) -> ([89]); +store_temp([7]) -> ([90]); +store_temp([2]) -> ([91]); +store_temp,)>>([88]) -> ([92]); +return([89], [90], [91], [92]); +revoke_ap_tracking() -> (); +withdraw_gas([0], [1]) { fallthrough([4], [5]) 390([6], [7]) }; +branch_align() -> (); +struct_deconstruct>([3]) -> ([8]); +array_len([8]) -> ([9]); +snapshot_take([9]) -> ([10], [11]); +drop([10]) -> (); +u32_const<0>() -> ([12]); +snapshot_take([12]) -> ([13], [14]); +drop([13]) -> (); +rename([11]) -> ([15]); +rename([14]) -> ([16]); +store_temp([15]) -> ([15]); +store_temp([4]) -> ([4]); +u32_eq([15], [16]) { fallthrough() 331() }; +branch_align() -> (); +array_new() -> ([17]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([18]); +store_temp([18]) -> ([18]); +array_append([17], [18]) -> ([19]); +struct_construct() -> ([20]); +struct_construct>>([20], [19]) -> ([21]); +enum_init,)>, 1>([21]) -> ([22]); +store_temp([4]) -> ([23]); +store_temp([5]) -> ([24]); +store_temp([2]) -> ([25]); +store_temp,)>>([22]) -> ([26]); +return([23], [24], [25], [26]); +branch_align() -> (); +get_builtin_costs() -> ([27]); +store_temp([27]) -> ([27]); +withdraw_gas_all([4], [5], [27]) { fallthrough([28], [29]) 377([30], [31]) }; +branch_align() -> (); +struct_construct() -> ([32]); +struct_construct() -> ([33]); +struct_construct() -> ([34]); +struct_construct() -> ([35]); +struct_construct() -> ([36]); +struct_construct() -> ([37]); +struct_construct([32], [33], [34], [35], [36], [37]) -> ([38]); +snapshot_take([38]) -> ([39], [40]); +drop([39]) -> (); +store_temp([28]) -> ([45]); +store_temp([29]) -> ([46]); +store_temp([2]) -> ([47]); +store_temp([40]) -> ([48]); +function_call([45], [46], [47], [48]) -> ([41], [42], [43], [44]); +enum_match>([44]) { fallthrough([49]) 370([50]) }; +branch_align() -> (); +array_new() -> ([51]); +struct_deconstruct>([49]) -> ([52]); +snapshot_take([52]) -> ([53], [54]); +drop([53]) -> (); +store_temp([54]) -> ([57]); +store_temp>([51]) -> ([58]); +function_call([57], [58]) -> ([55], [56]); +drop([56]) -> (); +snapshot_take>([55]) -> ([59], [60]); +drop>([59]) -> (); +struct_construct>([60]) -> ([61]); +struct_construct>>([61]) -> ([62]); +enum_init,)>, 0>([62]) -> ([63]); +store_temp([41]) -> ([64]); +store_temp([42]) -> ([65]); +store_temp([43]) -> ([66]); +store_temp,)>>([63]) -> ([67]); +return([64], [65], [66], [67]); +branch_align() -> (); +enum_init,)>, 1>([50]) -> ([68]); +store_temp([41]) -> ([69]); +store_temp([42]) -> ([70]); +store_temp([43]) -> ([71]); +store_temp,)>>([68]) -> ([72]); +return([69], [70], [71], [72]); +branch_align() -> (); +array_new() -> ([73]); +felt252_const<375233589013918064796019>() -> ([74]); +store_temp([74]) -> ([74]); +array_append([73], [74]) -> ([75]); +struct_construct() -> ([76]); +struct_construct>>([76], [75]) -> ([77]); +enum_init,)>, 1>([77]) -> ([78]); +store_temp([30]) -> ([79]); +store_temp([31]) -> ([80]); +store_temp([2]) -> ([81]); +store_temp,)>>([78]) -> ([82]); +return([79], [80], [81], [82]); +branch_align() -> (); +drop>([3]) -> (); +array_new() -> ([83]); +felt252_const<375233589013918064796019>() -> ([84]); +store_temp([84]) -> ([84]); +array_append([83], [84]) -> ([85]); +struct_construct() -> ([86]); +struct_construct>>([86], [85]) -> ([87]); +enum_init,)>, 1>([87]) -> ([88]); +store_temp([6]) -> ([89]); +store_temp([7]) -> ([90]); +store_temp([2]) -> ([91]); +store_temp,)>>([88]) -> ([92]); +return([89], [90], [91], [92]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 519([7], [8]) }; +branch_align() -> (); +store_temp([5]) -> ([12]); +store_temp>([4]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 503([15]) }; +branch_align() -> (); +struct_deconstruct>([10]) -> ([16]); +array_len([16]) -> ([17]); +snapshot_take([17]) -> ([18], [19]); +drop([18]) -> (); +u32_const<0>() -> ([20]); +snapshot_take([20]) -> ([21], [22]); +drop([21]) -> (); +rename([19]) -> ([23]); +rename([22]) -> ([24]); +store_temp([23]) -> ([23]); +u32_eq([23], [24]) { fallthrough() 438() }; +branch_align() -> (); +drop([14]) -> (); +array_new() -> ([25]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([26]); +store_temp([26]) -> ([26]); +array_append([25], [26]) -> ([27]); +struct_construct() -> ([28]); +struct_construct>>([28], [27]) -> ([29]); +enum_init,)>, 1>([29]) -> ([30]); +store_temp([0]) -> ([31]); +store_temp([9]) -> ([32]); +store_temp([6]) -> ([33]); +store_temp([3]) -> ([34]); +store_temp,)>>([30]) -> ([35]); +return([31], [32], [33], [34], [35]); +branch_align() -> (); +get_builtin_costs() -> ([36]); +store_temp([36]) -> ([36]); +withdraw_gas_all([9], [6], [36]) { fallthrough([37], [38]) 488([39], [40]) }; +branch_align() -> (); +struct_construct() -> ([41]); +struct_construct() -> ([42]); +struct_construct() -> ([43]); +struct_construct() -> ([44]); +struct_construct() -> ([45]); +struct_construct() -> ([46]); +struct_construct([41], [42], [43], [44], [45], [46]) -> ([47]); +snapshot_take([47]) -> ([48], [49]); +drop([48]) -> (); +store_temp([37]) -> ([55]); +store_temp([38]) -> ([56]); +store_temp([0]) -> ([57]); +store_temp([3]) -> ([58]); +store_temp([49]) -> ([59]); +store_temp([14]) -> ([60]); +function_call([55], [56], [57], [58], [59], [60]) -> ([50], [51], [52], [53], [54]); +enum_match>([54]) { fallthrough([61]) 480([62]) }; +branch_align() -> (); +array_new() -> ([63]); +struct_deconstruct>([61]) -> ([64]); +snapshot_take([64]) -> ([65], [66]); +drop([65]) -> (); +store_temp([66]) -> ([69]); +store_temp>([63]) -> ([70]); +function_call([69], [70]) -> ([67], [68]); +drop([68]) -> (); +snapshot_take>([67]) -> ([71], [72]); +drop>([71]) -> (); +struct_construct>([72]) -> ([73]); +struct_construct>>([73]) -> ([74]); +enum_init,)>, 0>([74]) -> ([75]); +store_temp([52]) -> ([76]); +store_temp([50]) -> ([77]); +store_temp([51]) -> ([78]); +store_temp([53]) -> ([79]); +store_temp,)>>([75]) -> ([80]); +return([76], [77], [78], [79], [80]); +branch_align() -> (); +enum_init,)>, 1>([62]) -> ([81]); +store_temp([52]) -> ([82]); +store_temp([50]) -> ([83]); +store_temp([51]) -> ([84]); +store_temp([53]) -> ([85]); +store_temp,)>>([81]) -> ([86]); +return([82], [83], [84], [85], [86]); +branch_align() -> (); +drop([14]) -> (); +array_new() -> ([87]); +felt252_const<375233589013918064796019>() -> ([88]); +store_temp([88]) -> ([88]); +array_append([87], [88]) -> ([89]); +struct_construct() -> ([90]); +struct_construct>>([90], [89]) -> ([91]); +enum_init,)>, 1>([91]) -> ([92]); +store_temp([0]) -> ([93]); +store_temp([39]) -> ([94]); +store_temp([40]) -> ([95]); +store_temp([3]) -> ([96]); +store_temp,)>>([92]) -> ([97]); +return([93], [94], [95], [96], [97]); +branch_align() -> (); +drop([15]) -> (); +drop>([10]) -> (); +array_new() -> ([98]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([99]); +store_temp([99]) -> ([99]); +array_append([98], [99]) -> ([100]); +struct_construct() -> ([101]); +struct_construct>>([101], [100]) -> ([102]); +enum_init,)>, 1>([102]) -> ([103]); +store_temp([0]) -> ([104]); +store_temp([9]) -> ([105]); +store_temp([6]) -> ([106]); +store_temp([3]) -> ([107]); +store_temp,)>>([103]) -> ([108]); +return([104], [105], [106], [107], [108]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([109]); +felt252_const<375233589013918064796019>() -> ([110]); +store_temp([110]) -> ([110]); +array_append([109], [110]) -> ([111]); +struct_construct() -> ([112]); +struct_construct>>([112], [111]) -> ([113]); +enum_init,)>, 1>([113]) -> ([114]); +store_temp([0]) -> ([115]); +store_temp([7]) -> ([116]); +store_temp([8]) -> ([117]); +store_temp([3]) -> ([118]); +store_temp,)>>([114]) -> ([119]); +return([115], [116], [117], [118], [119]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 674([7], [8]) }; +branch_align() -> (); +store_temp([5]) -> ([12]); +store_temp>([4]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 658([15]) }; +branch_align() -> (); +store_temp([9]) -> ([19]); +store_temp>([10]) -> ([20]); +function_call([19], [20]) -> ([16], [17], [18]); +enum_match>([18]) { fallthrough([21]) 641([22]) }; +branch_align() -> (); +struct_deconstruct>([17]) -> ([23]); +array_len([23]) -> ([24]); +snapshot_take([24]) -> ([25], [26]); +drop([25]) -> (); +u32_const<0>() -> ([27]); +snapshot_take([27]) -> ([28], [29]); +drop([28]) -> (); +rename([26]) -> ([30]); +rename([29]) -> ([31]); +store_temp([30]) -> ([30]); +u32_eq([30], [31]) { fallthrough() 574() }; +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([32]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([33]); +store_temp([33]) -> ([33]); +array_append([32], [33]) -> ([34]); +struct_construct() -> ([35]); +struct_construct>>([35], [34]) -> ([36]); +enum_init,)>, 1>([36]) -> ([37]); +store_temp([0]) -> ([38]); +store_temp([16]) -> ([39]); +store_temp([6]) -> ([40]); +store_temp([3]) -> ([41]); +store_temp,)>>([37]) -> ([42]); +return([38], [39], [40], [41], [42]); +branch_align() -> (); +get_builtin_costs() -> ([43]); +store_temp([43]) -> ([43]); +withdraw_gas_all([16], [6], [43]) { fallthrough([44], [45]) 625([46], [47]) }; +branch_align() -> (); +struct_construct() -> ([48]); +struct_construct() -> ([49]); +struct_construct() -> ([50]); +struct_construct() -> ([51]); +struct_construct() -> ([52]); +struct_construct() -> ([53]); +struct_construct([48], [49], [50], [51], [52], [53]) -> ([54]); +snapshot_take([54]) -> ([55], [56]); +drop([55]) -> (); +store_temp([44]) -> ([62]); +store_temp([45]) -> ([63]); +store_temp([0]) -> ([64]); +store_temp([3]) -> ([65]); +store_temp([56]) -> ([66]); +store_temp([14]) -> ([67]); +store_temp([21]) -> ([68]); +function_call([62], [63], [64], [65], [66], [67], [68]) -> ([57], [58], [59], [60], [61]); +enum_match>([61]) { fallthrough([69]) 617([70]) }; +branch_align() -> (); +array_new() -> ([71]); +struct_deconstruct>([69]) -> ([72]); +snapshot_take([72]) -> ([73], [74]); +drop([73]) -> (); +store_temp([74]) -> ([77]); +store_temp>([71]) -> ([78]); +function_call([77], [78]) -> ([75], [76]); +drop([76]) -> (); +snapshot_take>([75]) -> ([79], [80]); +drop>([79]) -> (); +struct_construct>([80]) -> ([81]); +struct_construct>>([81]) -> ([82]); +enum_init,)>, 0>([82]) -> ([83]); +store_temp([59]) -> ([84]); +store_temp([57]) -> ([85]); +store_temp([58]) -> ([86]); +store_temp([60]) -> ([87]); +store_temp,)>>([83]) -> ([88]); +return([84], [85], [86], [87], [88]); +branch_align() -> (); +enum_init,)>, 1>([70]) -> ([89]); +store_temp([59]) -> ([90]); +store_temp([57]) -> ([91]); +store_temp([58]) -> ([92]); +store_temp([60]) -> ([93]); +store_temp,)>>([89]) -> ([94]); +return([90], [91], [92], [93], [94]); +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([95]); +felt252_const<375233589013918064796019>() -> ([96]); +store_temp([96]) -> ([96]); +array_append([95], [96]) -> ([97]); +struct_construct() -> ([98]); +struct_construct>>([98], [97]) -> ([99]); +enum_init,)>, 1>([99]) -> ([100]); +store_temp([0]) -> ([101]); +store_temp([46]) -> ([102]); +store_temp([47]) -> ([103]); +store_temp([3]) -> ([104]); +store_temp,)>>([100]) -> ([105]); +return([101], [102], [103], [104], [105]); +branch_align() -> (); +drop([22]) -> (); +drop>([17]) -> (); +drop([14]) -> (); +array_new() -> ([106]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>() -> ([107]); +store_temp([107]) -> ([107]); +array_append([106], [107]) -> ([108]); +struct_construct() -> ([109]); +struct_construct>>([109], [108]) -> ([110]); +enum_init,)>, 1>([110]) -> ([111]); +store_temp([0]) -> ([112]); +store_temp([16]) -> ([113]); +store_temp([6]) -> ([114]); +store_temp([3]) -> ([115]); +store_temp,)>>([111]) -> ([116]); +return([112], [113], [114], [115], [116]); +branch_align() -> (); +drop([15]) -> (); +drop>([10]) -> (); +array_new() -> ([117]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([118]); +store_temp([118]) -> ([118]); +array_append([117], [118]) -> ([119]); +struct_construct() -> ([120]); +struct_construct>>([120], [119]) -> ([121]); +enum_init,)>, 1>([121]) -> ([122]); +store_temp([0]) -> ([123]); +store_temp([9]) -> ([124]); +store_temp([6]) -> ([125]); +store_temp([3]) -> ([126]); +store_temp,)>>([122]) -> ([127]); +return([123], [124], [125], [126], [127]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([128]); +felt252_const<375233589013918064796019>() -> ([129]); +store_temp([129]) -> ([129]); +array_append([128], [129]) -> ([130]); +struct_construct() -> ([131]); +struct_construct>>([131], [130]) -> ([132]); +enum_init,)>, 1>([132]) -> ([133]); +store_temp([0]) -> ([134]); +store_temp([7]) -> ([135]); +store_temp([8]) -> ([136]); +store_temp([3]) -> ([137]); +store_temp,)>>([133]) -> ([138]); +return([134], [135], [136], [137], [138]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 821([7], [8]) }; +branch_align() -> (); +store_temp([5]) -> ([12]); +store_temp>([4]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 805([15]) }; +branch_align() -> (); +store_temp([9]) -> ([19]); +store_temp>([10]) -> ([20]); +function_call([19], [20]) -> ([16], [17], [18]); +enum_match>([18]) { fallthrough([21]) 788([22]) }; +branch_align() -> (); +struct_deconstruct>([17]) -> ([23]); +array_len([23]) -> ([24]); +snapshot_take([24]) -> ([25], [26]); +drop([25]) -> (); +u32_const<0>() -> ([27]); +snapshot_take([27]) -> ([28], [29]); +drop([28]) -> (); +rename([26]) -> ([30]); +rename([29]) -> ([31]); +store_temp([30]) -> ([30]); +u32_eq([30], [31]) { fallthrough() 729() }; +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([32]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([33]); +store_temp([33]) -> ([33]); +array_append([32], [33]) -> ([34]); +struct_construct() -> ([35]); +struct_construct>>([35], [34]) -> ([36]); +enum_init,)>, 1>([36]) -> ([37]); +store_temp([0]) -> ([38]); +store_temp([16]) -> ([39]); +store_temp([6]) -> ([40]); +store_temp([3]) -> ([41]); +store_temp,)>>([37]) -> ([42]); +return([38], [39], [40], [41], [42]); +branch_align() -> (); +get_builtin_costs() -> ([43]); +store_temp([43]) -> ([43]); +withdraw_gas_all([16], [6], [43]) { fallthrough([44], [45]) 772([46], [47]) }; +branch_align() -> (); +struct_construct() -> ([48]); +struct_construct() -> ([49]); +struct_construct() -> ([50]); +struct_construct() -> ([51]); +struct_construct() -> ([52]); +struct_construct() -> ([53]); +struct_construct([48], [49], [50], [51], [52], [53]) -> ([54]); +store_temp([44]) -> ([60]); +store_temp([45]) -> ([61]); +store_temp([0]) -> ([62]); +store_temp([3]) -> ([63]); +store_temp([54]) -> ([64]); +store_temp([14]) -> ([65]); +store_temp([21]) -> ([66]); +function_call([60], [61], [62], [63], [64], [65], [66]) -> ([55], [56], [57], [58], [59]); +enum_match>([59]) { fallthrough([67]) 764([68]) }; +branch_align() -> (); +drop>([67]) -> (); +array_new() -> ([69]); +snapshot_take>([69]) -> ([70], [71]); +drop>([70]) -> (); +struct_construct>([71]) -> ([72]); +struct_construct>>([72]) -> ([73]); +enum_init,)>, 0>([73]) -> ([74]); +store_temp([57]) -> ([75]); +store_temp([55]) -> ([76]); +store_temp([56]) -> ([77]); +store_temp([58]) -> ([78]); +store_temp,)>>([74]) -> ([79]); +return([75], [76], [77], [78], [79]); +branch_align() -> (); +enum_init,)>, 1>([68]) -> ([80]); +store_temp([57]) -> ([81]); +store_temp([55]) -> ([82]); +store_temp([56]) -> ([83]); +store_temp([58]) -> ([84]); +store_temp,)>>([80]) -> ([85]); +return([81], [82], [83], [84], [85]); +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([86]); +felt252_const<375233589013918064796019>() -> ([87]); +store_temp([87]) -> ([87]); +array_append([86], [87]) -> ([88]); +struct_construct() -> ([89]); +struct_construct>>([89], [88]) -> ([90]); +enum_init,)>, 1>([90]) -> ([91]); +store_temp([0]) -> ([92]); +store_temp([46]) -> ([93]); +store_temp([47]) -> ([94]); +store_temp([3]) -> ([95]); +store_temp,)>>([91]) -> ([96]); +return([92], [93], [94], [95], [96]); +branch_align() -> (); +drop([22]) -> (); +drop>([17]) -> (); +drop([14]) -> (); +array_new() -> ([97]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>() -> ([98]); +store_temp([98]) -> ([98]); +array_append([97], [98]) -> ([99]); +struct_construct() -> ([100]); +struct_construct>>([100], [99]) -> ([101]); +enum_init,)>, 1>([101]) -> ([102]); +store_temp([0]) -> ([103]); +store_temp([16]) -> ([104]); +store_temp([6]) -> ([105]); +store_temp([3]) -> ([106]); +store_temp,)>>([102]) -> ([107]); +return([103], [104], [105], [106], [107]); +branch_align() -> (); +drop([15]) -> (); +drop>([10]) -> (); +array_new() -> ([108]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([109]); +store_temp([109]) -> ([109]); +array_append([108], [109]) -> ([110]); +struct_construct() -> ([111]); +struct_construct>>([111], [110]) -> ([112]); +enum_init,)>, 1>([112]) -> ([113]); +store_temp([0]) -> ([114]); +store_temp([9]) -> ([115]); +store_temp([6]) -> ([116]); +store_temp([3]) -> ([117]); +store_temp,)>>([113]) -> ([118]); +return([114], [115], [116], [117], [118]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([119]); +felt252_const<375233589013918064796019>() -> ([120]); +store_temp([120]) -> ([120]); +array_append([119], [120]) -> ([121]); +struct_construct() -> ([122]); +struct_construct>>([122], [121]) -> ([123]); +enum_init,)>, 1>([123]) -> ([124]); +store_temp([0]) -> ([125]); +store_temp([7]) -> ([126]); +store_temp([8]) -> ([127]); +store_temp([3]) -> ([128]); +store_temp,)>>([124]) -> ([129]); +return([125], [126], [127], [128], [129]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 994([7], [8]) }; +branch_align() -> (); +store_temp([5]) -> ([12]); +store_temp>([4]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 978([15]) }; +branch_align() -> (); +store_temp([9]) -> ([19]); +store_temp>([10]) -> ([20]); +function_call([19], [20]) -> ([16], [17], [18]); +enum_match>([18]) { fallthrough([21]) 961([22]) }; +branch_align() -> (); +store_temp([16]) -> ([26]); +store_temp>([17]) -> ([27]); +function_call([26], [27]) -> ([23], [24], [25]); +enum_match>([25]) { fallthrough([28]) 943([29]) }; +branch_align() -> (); +struct_deconstruct>([24]) -> ([30]); +array_len([30]) -> ([31]); +snapshot_take([31]) -> ([32], [33]); +drop([32]) -> (); +u32_const<0>() -> ([34]); +snapshot_take([34]) -> ([35], [36]); +drop([35]) -> (); +rename([33]) -> ([37]); +rename([36]) -> ([38]); +store_temp([37]) -> ([37]); +u32_eq([37], [38]) { fallthrough() 882() }; +branch_align() -> (); +drop([28]) -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([39]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([40]); +store_temp([40]) -> ([40]); +array_append([39], [40]) -> ([41]); +struct_construct() -> ([42]); +struct_construct>>([42], [41]) -> ([43]); +enum_init,)>, 1>([43]) -> ([44]); +store_temp([0]) -> ([45]); +store_temp([23]) -> ([46]); +store_temp([6]) -> ([47]); +store_temp([3]) -> ([48]); +store_temp,)>>([44]) -> ([49]); +return([45], [46], [47], [48], [49]); +branch_align() -> (); +get_builtin_costs() -> ([50]); +store_temp([50]) -> ([50]); +withdraw_gas_all([23], [6], [50]) { fallthrough([51], [52]) 926([53], [54]) }; +branch_align() -> (); +struct_construct() -> ([55]); +struct_construct() -> ([56]); +struct_construct() -> ([57]); +struct_construct() -> ([58]); +struct_construct() -> ([59]); +struct_construct() -> ([60]); +struct_construct([55], [56], [57], [58], [59], [60]) -> ([61]); +store_temp([51]) -> ([67]); +store_temp([52]) -> ([68]); +store_temp([0]) -> ([69]); +store_temp([3]) -> ([70]); +store_temp([61]) -> ([71]); +store_temp([14]) -> ([72]); +store_temp([21]) -> ([73]); +store_temp([28]) -> ([74]); +function_call([67], [68], [69], [70], [71], [72], [73], [74]) -> ([62], [63], [64], [65], [66]); +enum_match>([66]) { fallthrough([75]) 918([76]) }; +branch_align() -> (); +drop>([75]) -> (); +array_new() -> ([77]); +snapshot_take>([77]) -> ([78], [79]); +drop>([78]) -> (); +struct_construct>([79]) -> ([80]); +struct_construct>>([80]) -> ([81]); +enum_init,)>, 0>([81]) -> ([82]); +store_temp([64]) -> ([83]); +store_temp([62]) -> ([84]); +store_temp([63]) -> ([85]); +store_temp([65]) -> ([86]); +store_temp,)>>([82]) -> ([87]); +return([83], [84], [85], [86], [87]); +branch_align() -> (); +enum_init,)>, 1>([76]) -> ([88]); +store_temp([64]) -> ([89]); +store_temp([62]) -> ([90]); +store_temp([63]) -> ([91]); +store_temp([65]) -> ([92]); +store_temp,)>>([88]) -> ([93]); +return([89], [90], [91], [92], [93]); +branch_align() -> (); +drop([28]) -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([94]); +felt252_const<375233589013918064796019>() -> ([95]); +store_temp([95]) -> ([95]); +array_append([94], [95]) -> ([96]); +struct_construct() -> ([97]); +struct_construct>>([97], [96]) -> ([98]); +enum_init,)>, 1>([98]) -> ([99]); +store_temp([0]) -> ([100]); +store_temp([53]) -> ([101]); +store_temp([54]) -> ([102]); +store_temp([3]) -> ([103]); +store_temp,)>>([99]) -> ([104]); +return([100], [101], [102], [103], [104]); +branch_align() -> (); +drop([29]) -> (); +drop>([24]) -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([105]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492915>() -> ([106]); +store_temp([106]) -> ([106]); +array_append([105], [106]) -> ([107]); +struct_construct() -> ([108]); +struct_construct>>([108], [107]) -> ([109]); +enum_init,)>, 1>([109]) -> ([110]); +store_temp([0]) -> ([111]); +store_temp([23]) -> ([112]); +store_temp([6]) -> ([113]); +store_temp([3]) -> ([114]); +store_temp,)>>([110]) -> ([115]); +return([111], [112], [113], [114], [115]); +branch_align() -> (); +drop([22]) -> (); +drop([14]) -> (); +drop>([17]) -> (); +array_new() -> ([116]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>() -> ([117]); +store_temp([117]) -> ([117]); +array_append([116], [117]) -> ([118]); +struct_construct() -> ([119]); +struct_construct>>([119], [118]) -> ([120]); +enum_init,)>, 1>([120]) -> ([121]); +store_temp([0]) -> ([122]); +store_temp([16]) -> ([123]); +store_temp([6]) -> ([124]); +store_temp([3]) -> ([125]); +store_temp,)>>([121]) -> ([126]); +return([122], [123], [124], [125], [126]); +branch_align() -> (); +drop([15]) -> (); +drop>([10]) -> (); +array_new() -> ([127]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([128]); +store_temp([128]) -> ([128]); +array_append([127], [128]) -> ([129]); +struct_construct() -> ([130]); +struct_construct>>([130], [129]) -> ([131]); +enum_init,)>, 1>([131]) -> ([132]); +store_temp([0]) -> ([133]); +store_temp([9]) -> ([134]); +store_temp([6]) -> ([135]); +store_temp([3]) -> ([136]); +store_temp,)>>([132]) -> ([137]); +return([133], [134], [135], [136], [137]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([138]); +felt252_const<375233589013918064796019>() -> ([139]); +store_temp([139]) -> ([139]); +array_append([138], [139]) -> ([140]); +struct_construct() -> ([141]); +struct_construct>>([141], [140]) -> ([142]); +enum_init,)>, 1>([142]) -> ([143]); +store_temp([0]) -> ([144]); +store_temp([7]) -> ([145]); +store_temp([8]) -> ([146]); +store_temp([3]) -> ([147]); +store_temp,)>>([143]) -> ([148]); +return([144], [145], [146], [147], [148]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 1141([7], [8]) }; +branch_align() -> (); +store_temp([5]) -> ([12]); +store_temp>([4]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 1125([15]) }; +branch_align() -> (); +store_temp([9]) -> ([19]); +store_temp>([10]) -> ([20]); +function_call([19], [20]) -> ([16], [17], [18]); +enum_match>([18]) { fallthrough([21]) 1108([22]) }; +branch_align() -> (); +struct_deconstruct>([17]) -> ([23]); +array_len([23]) -> ([24]); +snapshot_take([24]) -> ([25], [26]); +drop([25]) -> (); +u32_const<0>() -> ([27]); +snapshot_take([27]) -> ([28], [29]); +drop([28]) -> (); +rename([26]) -> ([30]); +rename([29]) -> ([31]); +store_temp([30]) -> ([30]); +u32_eq([30], [31]) { fallthrough() 1049() }; +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([32]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([33]); +store_temp([33]) -> ([33]); +array_append([32], [33]) -> ([34]); +struct_construct() -> ([35]); +struct_construct>>([35], [34]) -> ([36]); +enum_init,)>, 1>([36]) -> ([37]); +store_temp([0]) -> ([38]); +store_temp([16]) -> ([39]); +store_temp([6]) -> ([40]); +store_temp([3]) -> ([41]); +store_temp,)>>([37]) -> ([42]); +return([38], [39], [40], [41], [42]); +branch_align() -> (); +get_builtin_costs() -> ([43]); +store_temp([43]) -> ([43]); +withdraw_gas_all([16], [6], [43]) { fallthrough([44], [45]) 1092([46], [47]) }; +branch_align() -> (); +struct_construct() -> ([48]); +struct_construct() -> ([49]); +struct_construct() -> ([50]); +struct_construct() -> ([51]); +struct_construct() -> ([52]); +struct_construct() -> ([53]); +struct_construct([48], [49], [50], [51], [52], [53]) -> ([54]); +store_temp([44]) -> ([60]); +store_temp([45]) -> ([61]); +store_temp([0]) -> ([62]); +store_temp([3]) -> ([63]); +store_temp([54]) -> ([64]); +store_temp([14]) -> ([65]); +store_temp([21]) -> ([66]); +function_call([60], [61], [62], [63], [64], [65], [66]) -> ([55], [56], [57], [58], [59]); +enum_match>([59]) { fallthrough([67]) 1084([68]) }; +branch_align() -> (); +drop>([67]) -> (); +array_new() -> ([69]); +snapshot_take>([69]) -> ([70], [71]); +drop>([70]) -> (); +struct_construct>([71]) -> ([72]); +struct_construct>>([72]) -> ([73]); +enum_init,)>, 0>([73]) -> ([74]); +store_temp([57]) -> ([75]); +store_temp([55]) -> ([76]); +store_temp([56]) -> ([77]); +store_temp([58]) -> ([78]); +store_temp,)>>([74]) -> ([79]); +return([75], [76], [77], [78], [79]); +branch_align() -> (); +enum_init,)>, 1>([68]) -> ([80]); +store_temp([57]) -> ([81]); +store_temp([55]) -> ([82]); +store_temp([56]) -> ([83]); +store_temp([58]) -> ([84]); +store_temp,)>>([80]) -> ([85]); +return([81], [82], [83], [84], [85]); +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([86]); +felt252_const<375233589013918064796019>() -> ([87]); +store_temp([87]) -> ([87]); +array_append([86], [87]) -> ([88]); +struct_construct() -> ([89]); +struct_construct>>([89], [88]) -> ([90]); +enum_init,)>, 1>([90]) -> ([91]); +store_temp([0]) -> ([92]); +store_temp([46]) -> ([93]); +store_temp([47]) -> ([94]); +store_temp([3]) -> ([95]); +store_temp,)>>([91]) -> ([96]); +return([92], [93], [94], [95], [96]); +branch_align() -> (); +drop([22]) -> (); +drop>([17]) -> (); +drop([14]) -> (); +array_new() -> ([97]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>() -> ([98]); +store_temp([98]) -> ([98]); +array_append([97], [98]) -> ([99]); +struct_construct() -> ([100]); +struct_construct>>([100], [99]) -> ([101]); +enum_init,)>, 1>([101]) -> ([102]); +store_temp([0]) -> ([103]); +store_temp([16]) -> ([104]); +store_temp([6]) -> ([105]); +store_temp([3]) -> ([106]); +store_temp,)>>([102]) -> ([107]); +return([103], [104], [105], [106], [107]); +branch_align() -> (); +drop([15]) -> (); +drop>([10]) -> (); +array_new() -> ([108]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([109]); +store_temp([109]) -> ([109]); +array_append([108], [109]) -> ([110]); +struct_construct() -> ([111]); +struct_construct>>([111], [110]) -> ([112]); +enum_init,)>, 1>([112]) -> ([113]); +store_temp([0]) -> ([114]); +store_temp([9]) -> ([115]); +store_temp([6]) -> ([116]); +store_temp([3]) -> ([117]); +store_temp,)>>([113]) -> ([118]); +return([114], [115], [116], [117], [118]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([119]); +felt252_const<375233589013918064796019>() -> ([120]); +store_temp([120]) -> ([120]); +array_append([119], [120]) -> ([121]); +struct_construct() -> ([122]); +struct_construct>>([122], [121]) -> ([123]); +enum_init,)>, 1>([123]) -> ([124]); +store_temp([0]) -> ([125]); +store_temp([7]) -> ([126]); +store_temp([8]) -> ([127]); +store_temp([3]) -> ([128]); +store_temp,)>>([124]) -> ([129]); +return([125], [126], [127], [128], [129]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 1288([7], [8]) }; +branch_align() -> (); +store_temp([5]) -> ([12]); +store_temp>([4]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 1272([15]) }; +branch_align() -> (); +store_temp([9]) -> ([19]); +store_temp>([10]) -> ([20]); +function_call([19], [20]) -> ([16], [17], [18]); +enum_match>([18]) { fallthrough([21]) 1255([22]) }; +branch_align() -> (); +struct_deconstruct>([17]) -> ([23]); +array_len([23]) -> ([24]); +snapshot_take([24]) -> ([25], [26]); +drop([25]) -> (); +u32_const<0>() -> ([27]); +snapshot_take([27]) -> ([28], [29]); +drop([28]) -> (); +rename([26]) -> ([30]); +rename([29]) -> ([31]); +store_temp([30]) -> ([30]); +u32_eq([30], [31]) { fallthrough() 1196() }; +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([32]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([33]); +store_temp([33]) -> ([33]); +array_append([32], [33]) -> ([34]); +struct_construct() -> ([35]); +struct_construct>>([35], [34]) -> ([36]); +enum_init,)>, 1>([36]) -> ([37]); +store_temp([0]) -> ([38]); +store_temp([16]) -> ([39]); +store_temp([6]) -> ([40]); +store_temp([3]) -> ([41]); +store_temp,)>>([37]) -> ([42]); +return([38], [39], [40], [41], [42]); +branch_align() -> (); +get_builtin_costs() -> ([43]); +store_temp([43]) -> ([43]); +withdraw_gas_all([16], [6], [43]) { fallthrough([44], [45]) 1239([46], [47]) }; +branch_align() -> (); +struct_construct() -> ([48]); +struct_construct() -> ([49]); +struct_construct() -> ([50]); +struct_construct() -> ([51]); +struct_construct() -> ([52]); +struct_construct() -> ([53]); +struct_construct([48], [49], [50], [51], [52], [53]) -> ([54]); +store_temp([44]) -> ([60]); +store_temp([45]) -> ([61]); +store_temp([0]) -> ([62]); +store_temp([3]) -> ([63]); +store_temp([54]) -> ([64]); +store_temp([14]) -> ([65]); +store_temp([21]) -> ([66]); +function_call([60], [61], [62], [63], [64], [65], [66]) -> ([55], [56], [57], [58], [59]); +enum_match>([59]) { fallthrough([67]) 1231([68]) }; +branch_align() -> (); +drop>([67]) -> (); +array_new() -> ([69]); +snapshot_take>([69]) -> ([70], [71]); +drop>([70]) -> (); +struct_construct>([71]) -> ([72]); +struct_construct>>([72]) -> ([73]); +enum_init,)>, 0>([73]) -> ([74]); +store_temp([57]) -> ([75]); +store_temp([55]) -> ([76]); +store_temp([56]) -> ([77]); +store_temp([58]) -> ([78]); +store_temp,)>>([74]) -> ([79]); +return([75], [76], [77], [78], [79]); +branch_align() -> (); +enum_init,)>, 1>([68]) -> ([80]); +store_temp([57]) -> ([81]); +store_temp([55]) -> ([82]); +store_temp([56]) -> ([83]); +store_temp([58]) -> ([84]); +store_temp,)>>([80]) -> ([85]); +return([81], [82], [83], [84], [85]); +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([86]); +felt252_const<375233589013918064796019>() -> ([87]); +store_temp([87]) -> ([87]); +array_append([86], [87]) -> ([88]); +struct_construct() -> ([89]); +struct_construct>>([89], [88]) -> ([90]); +enum_init,)>, 1>([90]) -> ([91]); +store_temp([0]) -> ([92]); +store_temp([46]) -> ([93]); +store_temp([47]) -> ([94]); +store_temp([3]) -> ([95]); +store_temp,)>>([91]) -> ([96]); +return([92], [93], [94], [95], [96]); +branch_align() -> (); +drop([22]) -> (); +drop>([17]) -> (); +drop([14]) -> (); +array_new() -> ([97]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>() -> ([98]); +store_temp([98]) -> ([98]); +array_append([97], [98]) -> ([99]); +struct_construct() -> ([100]); +struct_construct>>([100], [99]) -> ([101]); +enum_init,)>, 1>([101]) -> ([102]); +store_temp([0]) -> ([103]); +store_temp([16]) -> ([104]); +store_temp([6]) -> ([105]); +store_temp([3]) -> ([106]); +store_temp,)>>([102]) -> ([107]); +return([103], [104], [105], [106], [107]); +branch_align() -> (); +drop([15]) -> (); +drop>([10]) -> (); +array_new() -> ([108]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([109]); +store_temp([109]) -> ([109]); +array_append([108], [109]) -> ([110]); +struct_construct() -> ([111]); +struct_construct>>([111], [110]) -> ([112]); +enum_init,)>, 1>([112]) -> ([113]); +store_temp([0]) -> ([114]); +store_temp([9]) -> ([115]); +store_temp([6]) -> ([116]); +store_temp([3]) -> ([117]); +store_temp,)>>([113]) -> ([118]); +return([114], [115], [116], [117], [118]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([119]); +felt252_const<375233589013918064796019>() -> ([120]); +store_temp([120]) -> ([120]); +array_append([119], [120]) -> ([121]); +struct_construct() -> ([122]); +struct_construct>>([122], [121]) -> ([123]); +enum_init,)>, 1>([123]) -> ([124]); +store_temp([0]) -> ([125]); +store_temp([7]) -> ([126]); +store_temp([8]) -> ([127]); +store_temp([3]) -> ([128]); +store_temp,)>>([124]) -> ([129]); +return([125], [126], [127], [128], [129]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 1435([7], [8]) }; +branch_align() -> (); +store_temp([5]) -> ([12]); +store_temp>([4]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 1419([15]) }; +branch_align() -> (); +store_temp([9]) -> ([19]); +store_temp>([10]) -> ([20]); +function_call([19], [20]) -> ([16], [17], [18]); +enum_match>([18]) { fallthrough([21]) 1402([22]) }; +branch_align() -> (); +struct_deconstruct>([17]) -> ([23]); +array_len([23]) -> ([24]); +snapshot_take([24]) -> ([25], [26]); +drop([25]) -> (); +u32_const<0>() -> ([27]); +snapshot_take([27]) -> ([28], [29]); +drop([28]) -> (); +rename([26]) -> ([30]); +rename([29]) -> ([31]); +store_temp([30]) -> ([30]); +u32_eq([30], [31]) { fallthrough() 1343() }; +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([32]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([33]); +store_temp([33]) -> ([33]); +array_append([32], [33]) -> ([34]); +struct_construct() -> ([35]); +struct_construct>>([35], [34]) -> ([36]); +enum_init,)>, 1>([36]) -> ([37]); +store_temp([0]) -> ([38]); +store_temp([16]) -> ([39]); +store_temp([6]) -> ([40]); +store_temp([3]) -> ([41]); +store_temp,)>>([37]) -> ([42]); +return([38], [39], [40], [41], [42]); +branch_align() -> (); +get_builtin_costs() -> ([43]); +store_temp([43]) -> ([43]); +withdraw_gas_all([16], [6], [43]) { fallthrough([44], [45]) 1386([46], [47]) }; +branch_align() -> (); +struct_construct() -> ([48]); +struct_construct() -> ([49]); +struct_construct() -> ([50]); +struct_construct() -> ([51]); +struct_construct() -> ([52]); +struct_construct() -> ([53]); +struct_construct([48], [49], [50], [51], [52], [53]) -> ([54]); +store_temp([44]) -> ([60]); +store_temp([45]) -> ([61]); +store_temp([0]) -> ([62]); +store_temp([3]) -> ([63]); +store_temp([54]) -> ([64]); +store_temp([14]) -> ([65]); +store_temp([21]) -> ([66]); +function_call([60], [61], [62], [63], [64], [65], [66]) -> ([55], [56], [57], [58], [59]); +enum_match>([59]) { fallthrough([67]) 1378([68]) }; +branch_align() -> (); +drop>([67]) -> (); +array_new() -> ([69]); +snapshot_take>([69]) -> ([70], [71]); +drop>([70]) -> (); +struct_construct>([71]) -> ([72]); +struct_construct>>([72]) -> ([73]); +enum_init,)>, 0>([73]) -> ([74]); +store_temp([57]) -> ([75]); +store_temp([55]) -> ([76]); +store_temp([56]) -> ([77]); +store_temp([58]) -> ([78]); +store_temp,)>>([74]) -> ([79]); +return([75], [76], [77], [78], [79]); +branch_align() -> (); +enum_init,)>, 1>([68]) -> ([80]); +store_temp([57]) -> ([81]); +store_temp([55]) -> ([82]); +store_temp([56]) -> ([83]); +store_temp([58]) -> ([84]); +store_temp,)>>([80]) -> ([85]); +return([81], [82], [83], [84], [85]); +branch_align() -> (); +drop([21]) -> (); +drop([14]) -> (); +array_new() -> ([86]); +felt252_const<375233589013918064796019>() -> ([87]); +store_temp([87]) -> ([87]); +array_append([86], [87]) -> ([88]); +struct_construct() -> ([89]); +struct_construct>>([89], [88]) -> ([90]); +enum_init,)>, 1>([90]) -> ([91]); +store_temp([0]) -> ([92]); +store_temp([46]) -> ([93]); +store_temp([47]) -> ([94]); +store_temp([3]) -> ([95]); +store_temp,)>>([91]) -> ([96]); +return([92], [93], [94], [95], [96]); +branch_align() -> (); +drop([22]) -> (); +drop>([17]) -> (); +drop([14]) -> (); +array_new() -> ([97]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>() -> ([98]); +store_temp([98]) -> ([98]); +array_append([97], [98]) -> ([99]); +struct_construct() -> ([100]); +struct_construct>>([100], [99]) -> ([101]); +enum_init,)>, 1>([101]) -> ([102]); +store_temp([0]) -> ([103]); +store_temp([16]) -> ([104]); +store_temp([6]) -> ([105]); +store_temp([3]) -> ([106]); +store_temp,)>>([102]) -> ([107]); +return([103], [104], [105], [106], [107]); +branch_align() -> (); +drop([15]) -> (); +drop>([10]) -> (); +array_new() -> ([108]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([109]); +store_temp([109]) -> ([109]); +array_append([108], [109]) -> ([110]); +struct_construct() -> ([111]); +struct_construct>>([111], [110]) -> ([112]); +enum_init,)>, 1>([112]) -> ([113]); +store_temp([0]) -> ([114]); +store_temp([9]) -> ([115]); +store_temp([6]) -> ([116]); +store_temp([3]) -> ([117]); +store_temp,)>>([113]) -> ([118]); +return([114], [115], [116], [117], [118]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([119]); +felt252_const<375233589013918064796019>() -> ([120]); +store_temp([120]) -> ([120]); +array_append([119], [120]) -> ([121]); +struct_construct() -> ([122]); +struct_construct>>([122], [121]) -> ([123]); +enum_init,)>, 1>([123]) -> ([124]); +store_temp([0]) -> ([125]); +store_temp([7]) -> ([126]); +store_temp([8]) -> ([127]); +store_temp([3]) -> ([128]); +store_temp,)>>([124]) -> ([129]); +return([125], [126], [127], [128], [129]); +revoke_ap_tracking() -> (); +withdraw_gas([1], [2]) { fallthrough([5], [6]) 1662([7], [8]) }; +branch_align() -> (); +store_temp>([4]) -> ([11]); +function_call([11]) -> ([9], [10]); +store_temp([5]) -> ([5]); +enum_match>([10]) { fallthrough([12]) 1646([13]) }; +branch_align() -> (); +store_temp>([9]) -> ([16]); +function_call([16]) -> ([14], [15]); +enum_match>([15]) { fallthrough([17]) 1629([18]) }; +branch_align() -> (); +store_temp([5]) -> ([22]); +store_temp>([14]) -> ([23]); +function_call([22], [23]) -> ([19], [20], [21]); +enum_match>([21]) { fallthrough([24]) 1611([25]) }; +branch_align() -> (); +store_temp([19]) -> ([29]); +store_temp>([20]) -> ([30]); +function_call([29], [30]) -> ([26], [27], [28]); +enum_match>([28]) { fallthrough([31]) 1592([32]) }; +branch_align() -> (); +store_temp([26]) -> ([36]); +store_temp>([27]) -> ([37]); +function_call([36], [37]) -> ([33], [34], [35]); +enum_match>([35]) { fallthrough([38]) 1572([39]) }; +branch_align() -> (); +struct_deconstruct>([34]) -> ([40]); +array_len([40]) -> ([41]); +snapshot_take([41]) -> ([42], [43]); +drop([42]) -> (); +u32_const<0>() -> ([44]); +snapshot_take([44]) -> ([45], [46]); +drop([45]) -> (); +rename([43]) -> ([47]); +rename([46]) -> ([48]); +store_temp([47]) -> ([47]); +u32_eq([47], [48]) { fallthrough() 1507() }; +branch_align() -> (); +drop([38]) -> (); +drop([31]) -> (); +drop([24]) -> (); +drop([17]) -> (); +drop([12]) -> (); +array_new() -> ([49]); +felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>() -> ([50]); +store_temp([50]) -> ([50]); +array_append([49], [50]) -> ([51]); +struct_construct() -> ([52]); +struct_construct>>([52], [51]) -> ([53]); +enum_init,)>, 1>([53]) -> ([54]); +store_temp([0]) -> ([55]); +store_temp([33]) -> ([56]); +store_temp([6]) -> ([57]); +store_temp([3]) -> ([58]); +store_temp,)>>([54]) -> ([59]); +return([55], [56], [57], [58], [59]); +branch_align() -> (); +get_builtin_costs() -> ([60]); +store_temp([60]) -> ([60]); +withdraw_gas_all([33], [6], [60]) { fallthrough([61], [62]) 1553([63], [64]) }; +branch_align() -> (); +struct_construct() -> ([65]); +struct_construct() -> ([66]); +struct_construct() -> ([67]); +struct_construct() -> ([68]); +struct_construct() -> ([69]); +struct_construct() -> ([70]); +struct_construct([65], [66], [67], [68], [69], [70]) -> ([71]); +store_temp([61]) -> ([77]); +store_temp([62]) -> ([78]); +store_temp([0]) -> ([79]); +store_temp([3]) -> ([80]); +store_temp([71]) -> ([81]); +store_temp([12]) -> ([82]); +store_temp([17]) -> ([83]); +store_temp([24]) -> ([84]); +store_temp([31]) -> ([85]); +store_temp([38]) -> ([86]); +function_call([77], [78], [79], [80], [81], [82], [83], [84], [85], [86]) -> ([72], [73], [74], [75], [76]); +enum_match>([76]) { fallthrough([87]) 1545([88]) }; +branch_align() -> (); +drop>([87]) -> (); +array_new() -> ([89]); +snapshot_take>([89]) -> ([90], [91]); +drop>([90]) -> (); +struct_construct>([91]) -> ([92]); +struct_construct>>([92]) -> ([93]); +enum_init,)>, 0>([93]) -> ([94]); +store_temp([74]) -> ([95]); +store_temp([72]) -> ([96]); +store_temp([73]) -> ([97]); +store_temp([75]) -> ([98]); +store_temp,)>>([94]) -> ([99]); +return([95], [96], [97], [98], [99]); +branch_align() -> (); +enum_init,)>, 1>([88]) -> ([100]); +store_temp([74]) -> ([101]); +store_temp([72]) -> ([102]); +store_temp([73]) -> ([103]); +store_temp([75]) -> ([104]); +store_temp,)>>([100]) -> ([105]); +return([101], [102], [103], [104], [105]); +branch_align() -> (); +drop([38]) -> (); +drop([31]) -> (); +drop([24]) -> (); +drop([17]) -> (); +drop([12]) -> (); +array_new() -> ([106]); +felt252_const<375233589013918064796019>() -> ([107]); +store_temp([107]) -> ([107]); +array_append([106], [107]) -> ([108]); +struct_construct() -> ([109]); +struct_construct>>([109], [108]) -> ([110]); +enum_init,)>, 1>([110]) -> ([111]); +store_temp([0]) -> ([112]); +store_temp([63]) -> ([113]); +store_temp([64]) -> ([114]); +store_temp([3]) -> ([115]); +store_temp,)>>([111]) -> ([116]); +return([112], [113], [114], [115], [116]); +branch_align() -> (); +drop([39]) -> (); +drop>([34]) -> (); +drop([31]) -> (); +drop([24]) -> (); +drop([17]) -> (); +drop([12]) -> (); +array_new() -> ([117]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492917>() -> ([118]); +store_temp([118]) -> ([118]); +array_append([117], [118]) -> ([119]); +struct_construct() -> ([120]); +struct_construct>>([120], [119]) -> ([121]); +enum_init,)>, 1>([121]) -> ([122]); +store_temp([0]) -> ([123]); +store_temp([33]) -> ([124]); +store_temp([6]) -> ([125]); +store_temp([3]) -> ([126]); +store_temp,)>>([122]) -> ([127]); +return([123], [124], [125], [126], [127]); +branch_align() -> (); +drop([32]) -> (); +drop([17]) -> (); +drop([12]) -> (); +drop([24]) -> (); +drop>([27]) -> (); +array_new() -> ([128]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492916>() -> ([129]); +store_temp([129]) -> ([129]); +array_append([128], [129]) -> ([130]); +struct_construct() -> ([131]); +struct_construct>>([131], [130]) -> ([132]); +enum_init,)>, 1>([132]) -> ([133]); +store_temp([0]) -> ([134]); +store_temp([26]) -> ([135]); +store_temp([6]) -> ([136]); +store_temp([3]) -> ([137]); +store_temp,)>>([133]) -> ([138]); +return([134], [135], [136], [137], [138]); +branch_align() -> (); +drop([25]) -> (); +drop([17]) -> (); +drop([12]) -> (); +drop>([20]) -> (); +array_new() -> ([139]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492915>() -> ([140]); +store_temp([140]) -> ([140]); +array_append([139], [140]) -> ([141]); +struct_construct() -> ([142]); +struct_construct>>([142], [141]) -> ([143]); +enum_init,)>, 1>([143]) -> ([144]); +store_temp([0]) -> ([145]); +store_temp([19]) -> ([146]); +store_temp([6]) -> ([147]); +store_temp([3]) -> ([148]); +store_temp,)>>([144]) -> ([149]); +return([145], [146], [147], [148], [149]); +branch_align() -> (); +drop([18]) -> (); +drop([12]) -> (); +drop>([14]) -> (); +array_new() -> ([150]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492914>() -> ([151]); +store_temp([151]) -> ([151]); +array_append([150], [151]) -> ([152]); +struct_construct() -> ([153]); +struct_construct>>([153], [152]) -> ([154]); +enum_init,)>, 1>([154]) -> ([155]); +store_temp([0]) -> ([156]); +store_temp([5]) -> ([157]); +store_temp([6]) -> ([158]); +store_temp([3]) -> ([159]); +store_temp,)>>([155]) -> ([160]); +return([156], [157], [158], [159], [160]); +branch_align() -> (); +drop([13]) -> (); +drop>([9]) -> (); +array_new() -> ([161]); +felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>() -> ([162]); +store_temp([162]) -> ([162]); +array_append([161], [162]) -> ([163]); +struct_construct() -> ([164]); +struct_construct>>([164], [163]) -> ([165]); +enum_init,)>, 1>([165]) -> ([166]); +store_temp([0]) -> ([167]); +store_temp([5]) -> ([168]); +store_temp([6]) -> ([169]); +store_temp([3]) -> ([170]); +store_temp,)>>([166]) -> ([171]); +return([167], [168], [169], [170], [171]); +branch_align() -> (); +drop>([4]) -> (); +array_new() -> ([172]); +felt252_const<375233589013918064796019>() -> ([173]); +store_temp([173]) -> ([173]); +array_append([172], [173]) -> ([174]); +struct_construct() -> ([175]); +struct_construct>>([175], [174]) -> ([176]); +enum_init,)>, 1>([176]) -> ([177]); +store_temp([0]) -> ([178]); +store_temp([7]) -> ([179]); +store_temp([8]) -> ([180]); +store_temp([3]) -> ([181]); +store_temp,)>>([177]) -> ([182]); +return([178], [179], [180], [181], [182]); +struct_deconstruct([2]) -> ([3], [4], [5], [6], [7], [8]); +drop([4]) -> (); +drop([5]) -> (); +drop([6]) -> (); +drop([7]) -> (); +drop([8]) -> (); +store_temp([0]) -> ([12]); +store_temp([1]) -> ([13]); +store_temp([3]) -> ([14]); +function_call([12], [13], [14]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([15]) 1696([16]) }; +branch_align() -> (); +struct_deconstruct>([15]) -> ([17]); +struct_construct>([17]) -> ([18]); +enum_init, 0>([18]) -> ([19]); +store_temp([9]) -> ([20]); +store_temp([10]) -> ([21]); +store_temp>([19]) -> ([22]); +return([20], [21], [22]); +branch_align() -> (); +enum_init, 1>([16]) -> ([23]); +store_temp([9]) -> ([24]); +store_temp([10]) -> ([25]); +store_temp>([23]) -> ([26]); +return([24], [25], [26]); +rename([0]) -> ([2]); +array_append([1], [2]) -> ([3]); +struct_construct() -> ([4]); +store_temp>([3]) -> ([5]); +store_temp([4]) -> ([6]); +return([5], [6]); +struct_deconstruct([2]) -> ([3], [4], [5], [6], [7], [8]); +drop([3]) -> (); +drop([5]) -> (); +drop([6]) -> (); +drop([7]) -> (); +drop([8]) -> (); +store_temp([0]) -> ([12]); +store_temp([1]) -> ([13]); +store_temp([4]) -> ([14]); +function_call([12], [13], [14]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([15]) 1727([16]) }; +branch_align() -> (); +struct_deconstruct>([15]) -> ([17]); +struct_construct>([17]) -> ([18]); +enum_init, 0>([18]) -> ([19]); +store_temp([9]) -> ([20]); +store_temp([10]) -> ([21]); +store_temp>([19]) -> ([22]); +return([20], [21], [22]); +branch_align() -> (); +enum_init, 1>([16]) -> ([23]); +store_temp([9]) -> ([24]); +store_temp([10]) -> ([25]); +store_temp>([23]) -> ([26]); +return([24], [25], [26]); +struct_deconstruct([3]) -> ([4], [5], [6], [7], [8], [9]); +drop([4]) -> (); +drop([5]) -> (); +drop([7]) -> (); +drop([8]) -> (); +drop([9]) -> (); +store_temp([0]) -> ([14]); +store_temp([1]) -> ([15]); +store_temp([2]) -> ([16]); +store_temp([6]) -> ([17]); +function_call([14], [15], [16], [17]) -> ([10], [11], [12], [13]); +enum_match>([13]) { fallthrough([18]) 1754([19]) }; +branch_align() -> (); +struct_deconstruct>([18]) -> ([20]); +struct_construct>([20]) -> ([21]); +enum_init, 0>([21]) -> ([22]); +store_temp([10]) -> ([23]); +store_temp([11]) -> ([24]); +store_temp([12]) -> ([25]); +store_temp>([22]) -> ([26]); +return([23], [24], [25], [26]); +branch_align() -> (); +enum_init, 1>([19]) -> ([27]); +store_temp([10]) -> ([28]); +store_temp([11]) -> ([29]); +store_temp([12]) -> ([30]); +store_temp>([27]) -> ([31]); +return([28], [29], [30], [31]); +rename([0]) -> ([2]); +u8_to_felt252([2]) -> ([3]); +snapshot_take([3]) -> ([4], [5]); +drop([4]) -> (); +store_temp([5]) -> ([8]); +store_temp>([1]) -> ([9]); +function_call([8], [9]) -> ([6], [7]); +drop([7]) -> (); +struct_construct() -> ([10]); +store_temp>([6]) -> ([11]); +store_temp([10]) -> ([12]); +return([11], [12]); +struct_deconstruct([3]) -> ([4], [5], [6], [7], [8], [9]); +drop([4]) -> (); +drop([5]) -> (); +drop([6]) -> (); +drop([8]) -> (); +drop([9]) -> (); +store_temp([0]) -> ([14]); +store_temp([1]) -> ([15]); +store_temp([2]) -> ([16]); +store_temp([7]) -> ([17]); +function_call([14], [15], [16], [17]) -> ([10], [11], [12], [13]); +enum_match>([13]) { fallthrough([18]) 1794([19]) }; +branch_align() -> (); +struct_deconstruct>([18]) -> ([20]); +struct_construct>([20]) -> ([21]); +enum_init, 0>([21]) -> ([22]); +store_temp([10]) -> ([23]); +store_temp([11]) -> ([24]); +store_temp([12]) -> ([25]); +store_temp>([22]) -> ([26]); +return([23], [24], [25], [26]); +branch_align() -> (); +enum_init, 1>([19]) -> ([27]); +store_temp([10]) -> ([28]); +store_temp([11]) -> ([29]); +store_temp([12]) -> ([30]); +store_temp>([27]) -> ([31]); +return([28], [29], [30], [31]); +dup([0]) -> ([0], [2]); +struct_deconstruct([2]) -> ([3], [4]); +drop([4]) -> (); +store_temp([3]) -> ([7]); +store_temp>([1]) -> ([8]); +function_call([7], [8]) -> ([5], [6]); +drop([6]) -> (); +struct_deconstruct([0]) -> ([9], [10]); +drop([9]) -> (); +store_temp([10]) -> ([13]); +store_temp>([5]) -> ([14]); +function_call([13], [14]) -> ([11], [12]); +rename>([11]) -> ([15]); +rename([12]) -> ([16]); +return([15], [16]); +store_temp>([1]) -> ([4]); +function_call([4]) -> ([2], [3]); +enum_match>([3]) { fallthrough([5]) 1834([6]) }; +branch_align() -> (); +contract_address_try_from_felt252([0], [5]) { fallthrough([7], [8]) 1827([9]) }; +branch_align() -> (); +enum_init, 0>([8]) -> ([10]); +store_temp([7]) -> ([11]); +store_temp>([2]) -> ([12]); +store_temp>([10]) -> ([13]); +return([11], [12], [13]); +branch_align() -> (); +struct_construct() -> ([14]); +enum_init, 1>([14]) -> ([15]); +store_temp([9]) -> ([16]); +store_temp>([2]) -> ([17]); +store_temp>([15]) -> ([18]); +return([16], [17], [18]); +branch_align() -> (); +enum_init, 1>([6]) -> ([19]); +store_temp([0]) -> ([20]); +store_temp>([2]) -> ([21]); +store_temp>([19]) -> ([22]); +return([20], [21], [22]); +struct_deconstruct([4]) -> ([6], [7], [8], [9], [10], [11]); +drop([6]) -> (); +drop([7]) -> (); +drop([8]) -> (); +drop([9]) -> (); +drop([11]) -> (); +store_temp([0]) -> ([17]); +store_temp([1]) -> ([18]); +store_temp([2]) -> ([19]); +store_temp([3]) -> ([20]); +store_temp([10]) -> ([21]); +store_temp([5]) -> ([22]); +function_call([17], [18], [19], [20], [21], [22]) -> ([12], [13], [14], [15], [16]); +enum_match>([16]) { fallthrough([23]) 1864([24]) }; +branch_align() -> (); +struct_deconstruct>([23]) -> ([25]); +struct_construct>([25]) -> ([26]); +enum_init, 0>([26]) -> ([27]); +store_temp([12]) -> ([28]); +store_temp([13]) -> ([29]); +store_temp([14]) -> ([30]); +store_temp([15]) -> ([31]); +store_temp>([27]) -> ([32]); +return([28], [29], [30], [31], [32]); +branch_align() -> (); +enum_init, 1>([24]) -> ([33]); +store_temp([12]) -> ([34]); +store_temp([13]) -> ([35]); +store_temp([14]) -> ([36]); +store_temp([15]) -> ([37]); +store_temp>([33]) -> ([38]); +return([34], [35], [36], [37], [38]); +struct_deconstruct([4]) -> ([7], [8], [9], [10], [11], [12]); +drop([7]) -> (); +drop([8]) -> (); +drop([9]) -> (); +drop([10]) -> (); +drop([11]) -> (); +struct_construct>([5], [6]) -> ([13]); +store_temp([0]) -> ([19]); +store_temp([1]) -> ([20]); +store_temp([2]) -> ([21]); +store_temp([3]) -> ([22]); +store_temp([12]) -> ([23]); +store_temp>([13]) -> ([24]); +function_call([19], [20], [21], [22], [23], [24]) -> ([14], [15], [16], [17], [18]); +enum_match>([18]) { fallthrough([25]) 1897([26]) }; +branch_align() -> (); +struct_deconstruct>([25]) -> ([27]); +struct_construct>([27]) -> ([28]); +enum_init, 0>([28]) -> ([29]); +store_temp([14]) -> ([30]); +store_temp([15]) -> ([31]); +store_temp([16]) -> ([32]); +store_temp([17]) -> ([33]); +store_temp>([29]) -> ([34]); +return([30], [31], [32], [33], [34]); +branch_align() -> (); +enum_init, 1>([26]) -> ([35]); +store_temp([14]) -> ([36]); +store_temp([15]) -> ([37]); +store_temp([16]) -> ([38]); +store_temp([17]) -> ([39]); +store_temp>([35]) -> ([40]); +return([36], [37], [38], [39], [40]); +store_temp([0]) -> ([5]); +store_temp>([1]) -> ([6]); +function_call([5], [6]) -> ([2], [3], [4]); +enum_match>([4]) { fallthrough([7]) 1928([8]) }; +branch_align() -> (); +store_temp([2]) -> ([12]); +store_temp>([3]) -> ([13]); +function_call([12], [13]) -> ([9], [10], [11]); +enum_match>([11]) { fallthrough([14]) 1921([15]) }; +branch_align() -> (); +struct_construct([7], [14]) -> ([16]); +enum_init, 0>([16]) -> ([17]); +store_temp([9]) -> ([18]); +store_temp>([10]) -> ([19]); +store_temp>([17]) -> ([20]); +return([18], [19], [20]); +branch_align() -> (); +drop([7]) -> (); +enum_init, 1>([15]) -> ([21]); +store_temp([9]) -> ([22]); +store_temp>([10]) -> ([23]); +store_temp>([21]) -> ([24]); +return([22], [23], [24]); +branch_align() -> (); +enum_init, 1>([8]) -> ([25]); +store_temp([2]) -> ([26]); +store_temp>([3]) -> ([27]); +store_temp>([25]) -> ([28]); +return([26], [27], [28]); +store_temp([1]) -> ([10]); +store_temp([3]) -> ([11]); +function_call([10], [11]) -> ([7], [8], [9]); +enum_match>([9]) { fallthrough([12]) 1970([13]) }; +branch_align() -> (); +struct_deconstruct>([12]) -> ([14]); +store_temp([0]) -> ([20]); +store_temp([7]) -> ([21]); +store_temp([2]) -> ([22]); +store_temp([8]) -> ([23]); +store_temp([4]) -> ([24]); +store_temp([14]) -> ([25]); +store_temp([5]) -> ([26]); +store_temp([6]) -> ([27]); +function_call([20], [21], [22], [23], [24], [25], [26], [27]) -> ([15], [16], [17], [18], [19]); +enum_match>([19]) { fallthrough([28]) 1962([29]) }; +branch_align() -> (); +struct_deconstruct>([28]) -> ([30], [31]); +drop([31]) -> (); +struct_construct() -> ([32]); +struct_construct>([30], [32]) -> ([33]); +enum_init, 0>([33]) -> ([34]); +store_temp([15]) -> ([35]); +store_temp([16]) -> ([36]); +store_temp([17]) -> ([37]); +store_temp([18]) -> ([38]); +store_temp>([34]) -> ([39]); +return([35], [36], [37], [38], [39]); +branch_align() -> (); +enum_init, 1>([29]) -> ([40]); +store_temp([15]) -> ([41]); +store_temp([16]) -> ([42]); +store_temp([17]) -> ([43]); +store_temp([18]) -> ([44]); +store_temp>([40]) -> ([45]); +return([41], [42], [43], [44], [45]); +branch_align() -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([4]) -> (); +enum_init, 1>([13]) -> ([46]); +store_temp([0]) -> ([47]); +store_temp([7]) -> ([48]); +store_temp([2]) -> ([49]); +store_temp([8]) -> ([50]); +store_temp>([46]) -> ([51]); +return([47], [48], [49], [50], [51]); +store_temp([1]) -> ([11]); +store_temp([3]) -> ([12]); +function_call([11], [12]) -> ([8], [9], [10]); +enum_match>([10]) { fallthrough([13]) 2043([14]) }; +branch_align() -> (); +struct_deconstruct>([13]) -> ([15]); +store_temp([0]) -> ([21]); +store_temp([8]) -> ([22]); +store_temp([2]) -> ([23]); +store_temp([9]) -> ([24]); +store_temp([4]) -> ([25]); +dup([5]) -> ([5], [26]); +store_temp([26]) -> ([26]); +store_temp([15]) -> ([27]); +dup([7]) -> ([7], [28]); +store_temp([28]) -> ([28]); +function_call([21], [22], [23], [24], [25], [26], [27], [28]) -> ([16], [17], [18], [19], [20]); +enum_match>([20]) { fallthrough([29]) 2032([30]) }; +branch_align() -> (); +struct_deconstruct>([29]) -> ([31], [32]); +drop([32]) -> (); +store_temp([16]) -> ([38]); +store_temp([17]) -> ([39]); +store_temp([18]) -> ([40]); +store_temp([19]) -> ([41]); +store_temp([31]) -> ([42]); +store_temp([5]) -> ([43]); +store_temp([6]) -> ([44]); +store_temp([7]) -> ([45]); +function_call([38], [39], [40], [41], [42], [43], [44], [45]) -> ([33], [34], [35], [36], [37]); +enum_match>([37]) { fallthrough([46]) 2024([47]) }; +branch_align() -> (); +struct_deconstruct>([46]) -> ([48], [49]); +drop([49]) -> (); +struct_construct() -> ([50]); +struct_construct>([48], [50]) -> ([51]); +enum_init, 0>([51]) -> ([52]); +store_temp([33]) -> ([53]); +store_temp([34]) -> ([54]); +store_temp([35]) -> ([55]); +store_temp([36]) -> ([56]); +store_temp>([52]) -> ([57]); +return([53], [54], [55], [56], [57]); +branch_align() -> (); +enum_init, 1>([47]) -> ([58]); +store_temp([33]) -> ([59]); +store_temp([34]) -> ([60]); +store_temp([35]) -> ([61]); +store_temp([36]) -> ([62]); +store_temp>([58]) -> ([63]); +return([59], [60], [61], [62], [63]); +branch_align() -> (); +drop([7]) -> (); +drop([6]) -> (); +drop([5]) -> (); +enum_init, 1>([30]) -> ([64]); +store_temp([16]) -> ([65]); +store_temp([17]) -> ([66]); +store_temp([18]) -> ([67]); +store_temp([19]) -> ([68]); +store_temp>([64]) -> ([69]); +return([65], [66], [67], [68], [69]); +branch_align() -> (); +drop([7]) -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([4]) -> (); +enum_init, 1>([14]) -> ([70]); +store_temp([0]) -> ([71]); +store_temp([8]) -> ([72]); +store_temp([2]) -> ([73]); +store_temp([9]) -> ([74]); +store_temp>([70]) -> ([75]); +return([71], [72], [73], [74], [75]); +store_temp([1]) -> ([10]); +store_temp([3]) -> ([11]); +function_call([10], [11]) -> ([7], [8], [9]); +enum_match>([9]) { fallthrough([12]) 2091([13]) }; +branch_align() -> (); +struct_deconstruct>([12]) -> ([14]); +store_temp([0]) -> ([20]); +store_temp([7]) -> ([21]); +store_temp([2]) -> ([22]); +store_temp([8]) -> ([23]); +store_temp([4]) -> ([24]); +store_temp([14]) -> ([25]); +store_temp([5]) -> ([26]); +store_temp([6]) -> ([27]); +function_call([20], [21], [22], [23], [24], [25], [26], [27]) -> ([15], [16], [17], [18], [19]); +enum_match>([19]) { fallthrough([28]) 2083([29]) }; +branch_align() -> (); +struct_deconstruct>([28]) -> ([30], [31]); +drop([31]) -> (); +struct_construct() -> ([32]); +struct_construct>([30], [32]) -> ([33]); +enum_init, 0>([33]) -> ([34]); +store_temp([15]) -> ([35]); +store_temp([16]) -> ([36]); +store_temp([17]) -> ([37]); +store_temp([18]) -> ([38]); +store_temp>([34]) -> ([39]); +return([35], [36], [37], [38], [39]); +branch_align() -> (); +enum_init, 1>([29]) -> ([40]); +store_temp([15]) -> ([41]); +store_temp([16]) -> ([42]); +store_temp([17]) -> ([43]); +store_temp([18]) -> ([44]); +store_temp>([40]) -> ([45]); +return([41], [42], [43], [44], [45]); +branch_align() -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([4]) -> (); +enum_init, 1>([13]) -> ([46]); +store_temp([0]) -> ([47]); +store_temp([7]) -> ([48]); +store_temp([2]) -> ([49]); +store_temp([8]) -> ([50]); +store_temp>([46]) -> ([51]); +return([47], [48], [49], [50], [51]); +store_temp([1]) -> ([10]); +store_temp([3]) -> ([11]); +function_call([10], [11]) -> ([7], [8], [9]); +enum_match>([9]) { fallthrough([12]) 2194([13]) }; +branch_align() -> (); +struct_deconstruct([4]) -> ([14], [15], [16], [17], [18], [19]); +snapshot_take([19]) -> ([20], [21]); +struct_deconstruct>([12]) -> ([22]); +dup([22]) -> ([22], [23]); +dup([5]) -> ([5], [24]); +struct_construct>([23], [24]) -> ([25]); +store_temp([0]) -> ([31]); +store_temp([7]) -> ([32]); +store_temp([2]) -> ([33]); +store_temp([8]) -> ([34]); +store_temp([21]) -> ([35]); +store_temp>([25]) -> ([36]); +function_call([31], [32], [33], [34], [35], [36]) -> ([26], [27], [28], [29], [30]); +enum_match>([30]) { fallthrough([37]) 2177([38]) }; +branch_align() -> (); +struct_deconstruct>([37]) -> ([39]); +store_temp([26]) -> ([42]); +store_temp([39]) -> ([43]); +store_temp([6]) -> ([44]); +function_call([42], [43], [44]) -> ([40], [41]); +enum_match>([41]) { fallthrough([45]) 2161([46]) }; +branch_align() -> (); +struct_deconstruct>([45]) -> ([47]); +struct_construct([14], [15], [16], [17], [18], [20]) -> ([48]); +store_temp([40]) -> ([54]); +store_temp([27]) -> ([55]); +store_temp([28]) -> ([56]); +store_temp([29]) -> ([57]); +store_temp([48]) -> ([58]); +store_temp([22]) -> ([59]); +store_temp([5]) -> ([60]); +store_temp([47]) -> ([61]); +function_call([54], [55], [56], [57], [58], [59], [60], [61]) -> ([49], [50], [51], [52], [53]); +enum_match>([53]) { fallthrough([62]) 2153([63]) }; +branch_align() -> (); +struct_deconstruct>([62]) -> ([64], [65]); +drop([65]) -> (); +struct_construct() -> ([66]); +struct_construct>([64], [66]) -> ([67]); +enum_init, 0>([67]) -> ([68]); +store_temp([49]) -> ([69]); +store_temp([50]) -> ([70]); +store_temp([51]) -> ([71]); +store_temp([52]) -> ([72]); +store_temp>([68]) -> ([73]); +return([69], [70], [71], [72], [73]); +branch_align() -> (); +enum_init, 1>([63]) -> ([74]); +store_temp([49]) -> ([75]); +store_temp([50]) -> ([76]); +store_temp([51]) -> ([77]); +store_temp([52]) -> ([78]); +store_temp>([74]) -> ([79]); +return([75], [76], [77], [78], [79]); +branch_align() -> (); +drop([14]) -> (); +drop([5]) -> (); +drop([22]) -> (); +drop([20]) -> (); +drop([18]) -> (); +drop([17]) -> (); +drop([16]) -> (); +drop([15]) -> (); +enum_init, 1>([46]) -> ([80]); +store_temp([40]) -> ([81]); +store_temp([27]) -> ([82]); +store_temp([28]) -> ([83]); +store_temp([29]) -> ([84]); +store_temp>([80]) -> ([85]); +return([81], [82], [83], [84], [85]); +branch_align() -> (); +drop([14]) -> (); +drop([5]) -> (); +drop([22]) -> (); +drop([15]) -> (); +drop([20]) -> (); +drop([18]) -> (); +drop([17]) -> (); +drop([16]) -> (); +drop([6]) -> (); +enum_init, 1>([38]) -> ([86]); +store_temp([26]) -> ([87]); +store_temp([27]) -> ([88]); +store_temp([28]) -> ([89]); +store_temp([29]) -> ([90]); +store_temp>([86]) -> ([91]); +return([87], [88], [89], [90], [91]); +branch_align() -> (); +drop([4]) -> (); +drop([5]) -> (); +drop([6]) -> (); +enum_init, 1>([13]) -> ([92]); +store_temp([0]) -> ([93]); +store_temp([7]) -> ([94]); +store_temp([2]) -> ([95]); +store_temp([8]) -> ([96]); +store_temp>([92]) -> ([97]); +return([93], [94], [95], [96], [97]); +store_temp([1]) -> ([10]); +store_temp([3]) -> ([11]); +function_call([10], [11]) -> ([7], [8], [9]); +enum_match>([9]) { fallthrough([12]) 2297([13]) }; +branch_align() -> (); +struct_deconstruct([4]) -> ([14], [15], [16], [17], [18], [19]); +snapshot_take([19]) -> ([20], [21]); +struct_deconstruct>([12]) -> ([22]); +dup([22]) -> ([22], [23]); +dup([5]) -> ([5], [24]); +struct_construct>([23], [24]) -> ([25]); +store_temp([0]) -> ([31]); +store_temp([7]) -> ([32]); +store_temp([2]) -> ([33]); +store_temp([8]) -> ([34]); +store_temp([21]) -> ([35]); +store_temp>([25]) -> ([36]); +function_call([31], [32], [33], [34], [35], [36]) -> ([26], [27], [28], [29], [30]); +enum_match>([30]) { fallthrough([37]) 2280([38]) }; +branch_align() -> (); +struct_deconstruct>([37]) -> ([39]); +store_temp([26]) -> ([42]); +store_temp([39]) -> ([43]); +store_temp([6]) -> ([44]); +function_call([42], [43], [44]) -> ([40], [41]); +enum_match>([41]) { fallthrough([45]) 2264([46]) }; +branch_align() -> (); +struct_deconstruct>([45]) -> ([47]); +struct_construct([14], [15], [16], [17], [18], [20]) -> ([48]); +store_temp([40]) -> ([54]); +store_temp([27]) -> ([55]); +store_temp([28]) -> ([56]); +store_temp([29]) -> ([57]); +store_temp([48]) -> ([58]); +store_temp([22]) -> ([59]); +store_temp([5]) -> ([60]); +store_temp([47]) -> ([61]); +function_call([54], [55], [56], [57], [58], [59], [60], [61]) -> ([49], [50], [51], [52], [53]); +enum_match>([53]) { fallthrough([62]) 2256([63]) }; +branch_align() -> (); +struct_deconstruct>([62]) -> ([64], [65]); +drop([65]) -> (); +struct_construct() -> ([66]); +struct_construct>([64], [66]) -> ([67]); +enum_init, 0>([67]) -> ([68]); +store_temp([49]) -> ([69]); +store_temp([50]) -> ([70]); +store_temp([51]) -> ([71]); +store_temp([52]) -> ([72]); +store_temp>([68]) -> ([73]); +return([69], [70], [71], [72], [73]); +branch_align() -> (); +enum_init, 1>([63]) -> ([74]); +store_temp([49]) -> ([75]); +store_temp([50]) -> ([76]); +store_temp([51]) -> ([77]); +store_temp([52]) -> ([78]); +store_temp>([74]) -> ([79]); +return([75], [76], [77], [78], [79]); +branch_align() -> (); +drop([14]) -> (); +drop([5]) -> (); +drop([22]) -> (); +drop([20]) -> (); +drop([18]) -> (); +drop([17]) -> (); +drop([16]) -> (); +drop([15]) -> (); +enum_init, 1>([46]) -> ([80]); +store_temp([40]) -> ([81]); +store_temp([27]) -> ([82]); +store_temp([28]) -> ([83]); +store_temp([29]) -> ([84]); +store_temp>([80]) -> ([85]); +return([81], [82], [83], [84], [85]); +branch_align() -> (); +drop([14]) -> (); +drop([5]) -> (); +drop([22]) -> (); +drop([15]) -> (); +drop([20]) -> (); +drop([18]) -> (); +drop([17]) -> (); +drop([16]) -> (); +drop([6]) -> (); +enum_init, 1>([38]) -> ([86]); +store_temp([26]) -> ([87]); +store_temp([27]) -> ([88]); +store_temp([28]) -> ([89]); +store_temp([29]) -> ([90]); +store_temp>([86]) -> ([91]); +return([87], [88], [89], [90], [91]); +branch_align() -> (); +drop([4]) -> (); +drop([5]) -> (); +drop([6]) -> (); +enum_init, 1>([13]) -> ([92]); +store_temp([0]) -> ([93]); +store_temp([7]) -> ([94]); +store_temp([2]) -> ([95]); +store_temp([8]) -> ([96]); +store_temp>([92]) -> ([97]); +return([93], [94], [95], [96], [97]); +struct_deconstruct>([0]) -> ([1]); +array_snapshot_pop_front([1]) { fallthrough([2], [3]) 2315([4]) }; +branch_align() -> (); +enum_init>, 0>([3]) -> ([5]); +store_temp>>([2]) -> ([6]); +store_temp>>([5]) -> ([7]); +jump() { 2320() }; +branch_align() -> (); +struct_construct() -> ([8]); +enum_init>, 1>([8]) -> ([9]); +store_temp>>([4]) -> ([6]); +store_temp>>([9]) -> ([7]); +struct_construct>([6]) -> ([10]); +store_temp>([10]) -> ([10]); +enum_match>>([7]) { fallthrough([11]) 2330([12]) }; +branch_align() -> (); +unbox([11]) -> ([13]); +rename([13]) -> ([14]); +enum_init, 0>([14]) -> ([15]); +store_temp>([10]) -> ([16]); +store_temp>([15]) -> ([17]); +return([16], [17]); +branch_align() -> (); +drop([12]) -> (); +struct_construct() -> ([18]); +enum_init, 1>([18]) -> ([19]); +store_temp>([10]) -> ([20]); +store_temp>([19]) -> ([21]); +return([20], [21]); +struct_deconstruct>([1]) -> ([2]); +array_snapshot_pop_front([2]) { fallthrough([3], [4]) 2344([5]) }; +branch_align() -> (); +enum_init>, 0>([4]) -> ([6]); +store_temp>>([3]) -> ([7]); +store_temp>>([6]) -> ([8]); +jump() { 2349() }; +branch_align() -> (); +struct_construct() -> ([9]); +enum_init>, 1>([9]) -> ([10]); +store_temp>>([5]) -> ([7]); +store_temp>>([10]) -> ([8]); +struct_construct>([7]) -> ([11]); +store_temp>([11]) -> ([11]); +enum_match>>([8]) { fallthrough([12]) 2371([13]) }; +branch_align() -> (); +unbox([12]) -> ([14]); +rename([14]) -> ([15]); +store_temp([0]) -> ([18]); +store_temp([15]) -> ([19]); +function_call([18], [19]) -> ([16], [17]); +enum_match>([17]) { fallthrough([20]) 2365([21]) }; +branch_align() -> (); +enum_init, 0>([20]) -> ([22]); +store_temp([16]) -> ([23]); +store_temp>([11]) -> ([24]); +store_temp>([22]) -> ([25]); +return([23], [24], [25]); +branch_align() -> (); +enum_init, 1>([21]) -> ([26]); +store_temp([16]) -> ([27]); +store_temp>([11]) -> ([28]); +store_temp>([26]) -> ([29]); +return([27], [28], [29]); +branch_align() -> (); +drop([13]) -> (); +struct_construct() -> ([30]); +enum_init, 1>([30]) -> ([31]); +store_temp([0]) -> ([32]); +store_temp>([11]) -> ([33]); +store_temp>([31]) -> ([34]); +return([32], [33], [34]); +struct_deconstruct([4]) -> ([10], [11], [12], [13], [14], [15]); +store_temp([1]) -> ([19]); +store_temp([3]) -> ([20]); +store_temp([10]) -> ([21]); +store_temp([5]) -> ([22]); +function_call([19], [20], [21], [22]) -> ([16], [17], [18]); +enum_match>([18]) { fallthrough([23]) 2572([24]) }; +branch_align() -> (); +store_temp([16]) -> ([28]); +store_temp([17]) -> ([29]); +store_temp([11]) -> ([30]); +store_temp([6]) -> ([31]); +function_call([28], [29], [30], [31]) -> ([25], [26], [27]); +enum_match>([27]) { fallthrough([32]) 2556([33]) }; +branch_align() -> (); +store_temp([25]) -> ([37]); +store_temp([26]) -> ([38]); +store_temp([12]) -> ([39]); +store_temp([7]) -> ([40]); +function_call([37], [38], [39], [40]) -> ([34], [35], [36]); +enum_match>([36]) { fallthrough([41]) 2541([42]) }; +branch_align() -> (); +dup([9]) -> ([9], [44]); +contract_address_to_felt252([44]) -> ([43]); +snapshot_take([43]) -> ([45], [46]); +drop([45]) -> (); +felt252_const<0>() -> ([47]); +snapshot_take([47]) -> ([48], [49]); +drop([48]) -> (); +rename([46]) -> ([50]); +rename([49]) -> ([51]); +felt252_sub([50], [51]) -> ([52]); +struct_deconstruct>([23]) -> ([53], [54]); +drop([54]) -> (); +struct_deconstruct>([32]) -> ([55], [56]); +drop([56]) -> (); +struct_deconstruct>([41]) -> ([57], [58]); +drop([58]) -> (); +store_temp([52]) -> ([52]); +felt252_is_zero([52]) { fallthrough() 2424([59]) }; +branch_align() -> (); +struct_construct() -> ([60]); +enum_init([60]) -> ([61]); +store_temp([61]) -> ([62]); +jump() { 2429() }; +branch_align() -> (); +drop>([59]) -> (); +struct_construct() -> ([63]); +enum_init([63]) -> ([64]); +store_temp([64]) -> ([62]); +bool_not_impl([62]) -> ([65]); +store_temp([65]) -> ([65]); +enum_match([65]) { fallthrough([66]) 2455([67]) }; +branch_align() -> (); +drop([66]) -> (); +drop([9]) -> (); +drop([55]) -> (); +drop([53]) -> (); +drop([8]) -> (); +drop([57]) -> (); +drop([15]) -> (); +drop([14]) -> (); +drop([13]) -> (); +array_new() -> ([68]); +felt252_const<7300388948442106731950660484798539862217172507820428101544021685107>() -> ([69]); +store_temp([69]) -> ([69]); +array_append([68], [69]) -> ([70]); +struct_construct() -> ([71]); +struct_construct>>([71], [70]) -> ([72]); +enum_init, 1>([72]) -> ([73]); +store_temp([0]) -> ([74]); +store_temp([34]) -> ([75]); +store_temp([2]) -> ([76]); +store_temp([35]) -> ([77]); +store_temp>([73]) -> ([78]); +return([74], [75], [76], [77], [78]); +branch_align() -> (); +drop([67]) -> (); +store_temp([34]) -> ([82]); +store_temp([35]) -> ([83]); +store_temp([13]) -> ([84]); +dup([8]) -> ([8], [85]); +store_temp([85]) -> ([85]); +function_call([82], [83], [84], [85]) -> ([79], [80], [81]); +enum_match>([81]) { fallthrough([86]) 2526([87]) }; +branch_align() -> (); +store_temp([0]) -> ([93]); +store_temp([79]) -> ([94]); +store_temp([2]) -> ([95]); +store_temp([80]) -> ([96]); +store_temp([14]) -> ([97]); +dup([9]) -> ([9], [98]); +store_temp([98]) -> ([98]); +dup([8]) -> ([8], [99]); +store_temp([99]) -> ([99]); +function_call([93], [94], [95], [96], [97], [98], [99]) -> ([88], [89], [90], [91], [92]); +enum_match>([92]) { fallthrough([100]) 2511([101]) }; +branch_align() -> (); +contract_address_const<0>() -> ([102]); +struct_deconstruct>([86]) -> ([103], [104]); +drop([104]) -> (); +struct_deconstruct>([100]) -> ([105], [106]); +drop([106]) -> (); +struct_construct([102], [9], [8]) -> ([107]); +enum_init([107]) -> ([108]); +struct_construct([53], [55], [57], [103], [105], [15]) -> ([109]); +store_temp([89]) -> ([113]); +store_temp([91]) -> ([114]); +store_temp([109]) -> ([115]); +store_temp([108]) -> ([116]); +function_call>>([113], [114], [115], [116]) -> ([110], [111], [112]); +enum_match>([112]) { fallthrough([117]) 2503([118]) }; +branch_align() -> (); +struct_deconstruct>([117]) -> ([119], [120]); +drop([120]) -> (); +struct_construct() -> ([121]); +struct_construct>([119], [121]) -> ([122]); +enum_init, 0>([122]) -> ([123]); +store_temp([88]) -> ([124]); +store_temp([110]) -> ([125]); +store_temp([90]) -> ([126]); +store_temp([111]) -> ([127]); +store_temp>([123]) -> ([128]); +return([124], [125], [126], [127], [128]); +branch_align() -> (); +enum_init, 1>([118]) -> ([129]); +store_temp([88]) -> ([130]); +store_temp([110]) -> ([131]); +store_temp([90]) -> ([132]); +store_temp([111]) -> ([133]); +store_temp>([129]) -> ([134]); +return([130], [131], [132], [133], [134]); +branch_align() -> (); +drop([53]) -> (); +drop([15]) -> (); +drop>([86]) -> (); +drop([9]) -> (); +drop([57]) -> (); +drop([55]) -> (); +drop([8]) -> (); +enum_init, 1>([101]) -> ([135]); +store_temp([88]) -> ([136]); +store_temp([89]) -> ([137]); +store_temp([90]) -> ([138]); +store_temp([91]) -> ([139]); +store_temp>([135]) -> ([140]); +return([136], [137], [138], [139], [140]); +branch_align() -> (); +drop([9]) -> (); +drop([55]) -> (); +drop([53]) -> (); +drop([8]) -> (); +drop([57]) -> (); +drop([15]) -> (); +drop([14]) -> (); +enum_init, 1>([87]) -> ([141]); +store_temp([0]) -> ([142]); +store_temp([79]) -> ([143]); +store_temp([2]) -> ([144]); +store_temp([80]) -> ([145]); +store_temp>([141]) -> ([146]); +return([142], [143], [144], [145], [146]); +branch_align() -> (); +drop([9]) -> (); +drop([13]) -> (); +drop>([32]) -> (); +drop([8]) -> (); +drop>([23]) -> (); +drop([15]) -> (); +drop([14]) -> (); +enum_init, 1>([42]) -> ([147]); +store_temp([0]) -> ([148]); +store_temp([34]) -> ([149]); +store_temp([2]) -> ([150]); +store_temp([35]) -> ([151]); +store_temp>([147]) -> ([152]); +return([148], [149], [150], [151], [152]); +branch_align() -> (); +drop([14]) -> (); +drop([15]) -> (); +drop([9]) -> (); +drop([13]) -> (); +drop([8]) -> (); +drop>([23]) -> (); +drop([7]) -> (); +drop([12]) -> (); +enum_init, 1>([33]) -> ([153]); +store_temp([0]) -> ([154]); +store_temp([25]) -> ([155]); +store_temp([2]) -> ([156]); +store_temp([26]) -> ([157]); +store_temp>([153]) -> ([158]); +return([154], [155], [156], [157], [158]); +branch_align() -> (); +drop([14]) -> (); +drop([15]) -> (); +drop([9]) -> (); +drop([13]) -> (); +drop([12]) -> (); +drop([8]) -> (); +drop([7]) -> (); +drop([6]) -> (); +drop([11]) -> (); +enum_init, 1>([24]) -> ([159]); +store_temp([0]) -> ([160]); +store_temp([16]) -> ([161]); +store_temp([2]) -> ([162]); +store_temp([17]) -> ([163]); +store_temp>([159]) -> ([164]); +return([160], [161], [162], [163], [164]); +drop([2]) -> (); +storage_base_address_const<1528802474226268325865027367859591458315299653151958663884057507666229546336>() -> ([3]); +storage_address_from_base([3]) -> ([4]); +u32_const<0>() -> ([5]); +store_temp([5]) -> ([5]); +store_temp([4]) -> ([4]); +storage_read_syscall([0], [1], [5], [4]) { fallthrough([6], [7], [8]) 2602([9], [10], [11]) }; +branch_align() -> (); +enum_init>, 0>([8]) -> ([12]); +store_temp([6]) -> ([13]); +store_temp([7]) -> ([14]); +store_temp>>([12]) -> ([15]); +jump() { 2607() }; +branch_align() -> (); +enum_init>, 1>([11]) -> ([16]); +store_temp([9]) -> ([13]); +store_temp([10]) -> ([14]); +store_temp>>([16]) -> ([15]); +rename>>([15]) -> ([18]); +function_call::unwrap_syscall>([18]) -> ([17]); +enum_match>([17]) { fallthrough([19]) 2618([20]) }; +branch_align() -> (); +struct_deconstruct>([19]) -> ([21]); +struct_construct>([21]) -> ([22]); +enum_init, 0>([22]) -> ([23]); +store_temp([13]) -> ([24]); +store_temp([14]) -> ([25]); +store_temp>([23]) -> ([26]); +return([24], [25], [26]); +branch_align() -> (); +enum_init, 1>([20]) -> ([27]); +store_temp([13]) -> ([28]); +store_temp([14]) -> ([29]); +store_temp>([27]) -> ([30]); +return([28], [29], [30]); +drop([2]) -> (); +storage_base_address_const<944713526212149105522785400348068751682982210605126537021911324578866405028>() -> ([3]); +storage_address_from_base([3]) -> ([4]); +u32_const<0>() -> ([5]); +store_temp([5]) -> ([5]); +store_temp([4]) -> ([4]); +storage_read_syscall([0], [1], [5], [4]) { fallthrough([6], [7], [8]) 2637([9], [10], [11]) }; +branch_align() -> (); +enum_init>, 0>([8]) -> ([12]); +store_temp([6]) -> ([13]); +store_temp([7]) -> ([14]); +store_temp>>([12]) -> ([15]); +jump() { 2642() }; +branch_align() -> (); +enum_init>, 1>([11]) -> ([16]); +store_temp([9]) -> ([13]); +store_temp([10]) -> ([14]); +store_temp>>([16]) -> ([15]); +rename>>([15]) -> ([18]); +function_call::unwrap_syscall>([18]) -> ([17]); +enum_match>([17]) { fallthrough([19]) 2653([20]) }; +branch_align() -> (); +struct_deconstruct>([19]) -> ([21]); +struct_construct>([21]) -> ([22]); +enum_init, 0>([22]) -> ([23]); +store_temp([13]) -> ([24]); +store_temp([14]) -> ([25]); +store_temp>([23]) -> ([26]); +return([24], [25], [26]); +branch_align() -> (); +enum_init, 1>([20]) -> ([27]); +store_temp([13]) -> ([28]); +store_temp([14]) -> ([29]); +store_temp>([27]) -> ([30]); +return([28], [29], [30]); +drop([3]) -> (); +storage_base_address_const<134830404806214277570220174593674215737759987247891306080029841794115377321>() -> ([4]); +u32_const<0>() -> ([5]); +store_temp([0]) -> ([10]); +store_temp([1]) -> ([11]); +store_temp([2]) -> ([12]); +store_temp([5]) -> ([13]); +store_temp([4]) -> ([14]); +function_call([10], [11], [12], [13], [14]) -> ([6], [7], [8], [9]); +enum_match>,)>>([9]) { fallthrough([15]) 2690([16]) }; +branch_align() -> (); +struct_deconstruct>>>([15]) -> ([17]); +store_temp>>([17]) -> ([19]); +function_call::unwrap_syscall>([19]) -> ([18]); +enum_match>([18]) { fallthrough([20]) 2683([21]) }; +branch_align() -> (); +struct_deconstruct>([20]) -> ([22]); +struct_construct>([22]) -> ([23]); +enum_init, 0>([23]) -> ([24]); +store_temp([6]) -> ([25]); +store_temp([7]) -> ([26]); +store_temp([8]) -> ([27]); +store_temp>([24]) -> ([28]); +return([25], [26], [27], [28]); +branch_align() -> (); +enum_init, 1>([21]) -> ([29]); +store_temp([6]) -> ([30]); +store_temp([7]) -> ([31]); +store_temp([8]) -> ([32]); +store_temp>([29]) -> ([33]); +return([30], [31], [32], [33]); +branch_align() -> (); +enum_init, 1>([16]) -> ([34]); +store_temp([6]) -> ([35]); +store_temp([7]) -> ([36]); +store_temp([8]) -> ([37]); +store_temp>([34]) -> ([38]); +return([35], [36], [37], [38]); +drop([3]) -> (); +storage_base_address_const<603278275252936218847294002513349627170936020082667936993356353388973422646>() -> ([4]); +u32_const<0>() -> ([5]); +store_temp([0]) -> ([10]); +store_temp([1]) -> ([11]); +store_temp([2]) -> ([12]); +store_temp([5]) -> ([13]); +store_temp([4]) -> ([14]); +function_call([10], [11], [12], [13], [14]) -> ([6], [7], [8], [9]); +enum_match>,)>>([9]) { fallthrough([15]) 2728([16]) }; +branch_align() -> (); +struct_deconstruct>>>([15]) -> ([17]); +store_temp>>([17]) -> ([19]); +function_call::unwrap_syscall>([19]) -> ([18]); +enum_match>([18]) { fallthrough([20]) 2721([21]) }; +branch_align() -> (); +struct_deconstruct>([20]) -> ([22]); +struct_construct>([22]) -> ([23]); +enum_init, 0>([23]) -> ([24]); +store_temp([6]) -> ([25]); +store_temp([7]) -> ([26]); +store_temp([8]) -> ([27]); +store_temp>([24]) -> ([28]); +return([25], [26], [27], [28]); +branch_align() -> (); +enum_init, 1>([21]) -> ([29]); +store_temp([6]) -> ([30]); +store_temp([7]) -> ([31]); +store_temp([8]) -> ([32]); +store_temp>([29]) -> ([33]); +return([30], [31], [32], [33]); +branch_align() -> (); +enum_init, 1>([16]) -> ([34]); +store_temp([6]) -> ([35]); +store_temp([7]) -> ([36]); +store_temp([8]) -> ([37]); +store_temp>([34]) -> ([38]); +return([35], [36], [37], [38]); +rename([0]) -> ([2]); +u128_to_felt252([2]) -> ([3]); +snapshot_take([3]) -> ([4], [5]); +drop([4]) -> (); +store_temp([5]) -> ([8]); +store_temp>([1]) -> ([9]); +function_call([8], [9]) -> ([6], [7]); +drop([7]) -> (); +struct_construct() -> ([10]); +store_temp>([6]) -> ([11]); +store_temp([10]) -> ([12]); +return([11], [12]); +store_temp([0]) -> ([9]); +store_temp([2]) -> ([10]); +store_temp([4]) -> ([11]); +store_temp([5]) -> ([12]); +function_call([9], [10], [11], [12]) -> ([6], [7], [8]); +u32_const<0>() -> ([13]); +store_temp([6]) -> ([18]); +store_temp([1]) -> ([19]); +store_temp([3]) -> ([20]); +store_temp([13]) -> ([21]); +store_temp([8]) -> ([22]); +function_call([18], [19], [20], [21], [22]) -> ([14], [15], [16], [17]); +enum_match>,)>>([17]) { fallthrough([23]) 2783([24]) }; +branch_align() -> (); +struct_deconstruct>>>([23]) -> ([25]); +store_temp>>([25]) -> ([27]); +function_call::unwrap_syscall>([27]) -> ([26]); +enum_match>([26]) { fallthrough([28]) 2775([29]) }; +branch_align() -> (); +struct_deconstruct>([28]) -> ([30]); +struct_construct>([30]) -> ([31]); +enum_init, 0>([31]) -> ([32]); +store_temp([14]) -> ([33]); +store_temp([15]) -> ([34]); +store_temp([7]) -> ([35]); +store_temp([16]) -> ([36]); +store_temp>([32]) -> ([37]); +return([33], [34], [35], [36], [37]); +branch_align() -> (); +enum_init, 1>([29]) -> ([38]); +store_temp([14]) -> ([39]); +store_temp([15]) -> ([40]); +store_temp([7]) -> ([41]); +store_temp([16]) -> ([42]); +store_temp>([38]) -> ([43]); +return([39], [40], [41], [42], [43]); +branch_align() -> (); +enum_init, 1>([24]) -> ([44]); +store_temp([14]) -> ([45]); +store_temp([15]) -> ([46]); +store_temp([7]) -> ([47]); +store_temp([16]) -> ([48]); +store_temp>([44]) -> ([49]); +return([45], [46], [47], [48], [49]); +store_temp([0]) -> ([9]); +store_temp([2]) -> ([10]); +store_temp([4]) -> ([11]); +store_temp>([5]) -> ([12]); +function_call([9], [10], [11], [12]) -> ([6], [7], [8]); +u32_const<0>() -> ([13]); +store_temp([6]) -> ([18]); +store_temp([1]) -> ([19]); +store_temp([3]) -> ([20]); +store_temp([13]) -> ([21]); +store_temp([8]) -> ([22]); +function_call([18], [19], [20], [21], [22]) -> ([14], [15], [16], [17]); +enum_match>,)>>([17]) { fallthrough([23]) 2827([24]) }; +branch_align() -> (); +struct_deconstruct>>>([23]) -> ([25]); +store_temp>>([25]) -> ([27]); +function_call::unwrap_syscall>([27]) -> ([26]); +enum_match>([26]) { fallthrough([28]) 2819([29]) }; +branch_align() -> (); +struct_deconstruct>([28]) -> ([30]); +struct_construct>([30]) -> ([31]); +enum_init, 0>([31]) -> ([32]); +store_temp([14]) -> ([33]); +store_temp([15]) -> ([34]); +store_temp([7]) -> ([35]); +store_temp([16]) -> ([36]); +store_temp>([32]) -> ([37]); +return([33], [34], [35], [36], [37]); +branch_align() -> (); +enum_init, 1>([29]) -> ([38]); +store_temp([14]) -> ([39]); +store_temp([15]) -> ([40]); +store_temp([7]) -> ([41]); +store_temp([16]) -> ([42]); +store_temp>([38]) -> ([43]); +return([39], [40], [41], [42], [43]); +branch_align() -> (); +enum_init, 1>([24]) -> ([44]); +store_temp([14]) -> ([45]); +store_temp([15]) -> ([46]); +store_temp([7]) -> ([47]); +store_temp([16]) -> ([48]); +store_temp>([44]) -> ([49]); +return([45], [46], [47], [48], [49]); +struct_deconstruct>([1]) -> ([2]); +array_snapshot_pop_front([2]) { fallthrough([3], [4]) 2842([5]) }; +branch_align() -> (); +enum_init>, 0>([4]) -> ([6]); +store_temp>>([3]) -> ([7]); +store_temp>>([6]) -> ([8]); +jump() { 2847() }; +branch_align() -> (); +struct_construct() -> ([9]); +enum_init>, 1>([9]) -> ([10]); +store_temp>>([5]) -> ([7]); +store_temp>>([10]) -> ([8]); +struct_construct>([7]) -> ([11]); +store_temp>([11]) -> ([11]); +enum_match>>([8]) { fallthrough([12]) 2869([13]) }; +branch_align() -> (); +unbox([12]) -> ([14]); +rename([14]) -> ([15]); +store_temp([0]) -> ([18]); +store_temp([15]) -> ([19]); +function_call([18], [19]) -> ([16], [17]); +enum_match>([17]) { fallthrough([20]) 2863([21]) }; +branch_align() -> (); +enum_init, 0>([20]) -> ([22]); +store_temp([16]) -> ([23]); +store_temp>([11]) -> ([24]); +store_temp>([22]) -> ([25]); +return([23], [24], [25]); +branch_align() -> (); +enum_init, 1>([21]) -> ([26]); +store_temp([16]) -> ([27]); +store_temp>([11]) -> ([28]); +store_temp>([26]) -> ([29]); +return([27], [28], [29]); +branch_align() -> (); +drop([13]) -> (); +struct_construct() -> ([30]); +enum_init, 1>([30]) -> ([31]); +store_temp([0]) -> ([32]); +store_temp>([11]) -> ([33]); +store_temp>([31]) -> ([34]); +return([32], [33], [34]); +store_temp([0]) -> ([5]); +store_temp([1]) -> ([6]); +function_call([5], [6]) -> ([2], [3], [4]); +enum_match,)>>([4]) { fallthrough([7]) 2895([8]) }; +branch_align() -> (); +struct_deconstruct>>([7]) -> ([9]); +unbox([9]) -> ([10]); +struct_deconstruct([10]) -> ([11], [12], [13], [14], [15]); +drop>([11]) -> (); +drop>([12]) -> (); +drop([14]) -> (); +drop([15]) -> (); +struct_construct>([13]) -> ([16]); +enum_init, 0>([16]) -> ([17]); +store_temp([2]) -> ([18]); +store_temp([3]) -> ([19]); +store_temp>([17]) -> ([20]); +return([18], [19], [20]); +branch_align() -> (); +enum_init, 1>([8]) -> ([21]); +store_temp([2]) -> ([22]); +store_temp([3]) -> ([23]); +store_temp>([21]) -> ([24]); +return([22], [23], [24]); +dup([5]) -> ([5], [9]); +contract_address_to_felt252([9]) -> ([8]); +snapshot_take([8]) -> ([10], [11]); +drop([10]) -> (); +felt252_const<0>() -> ([12]); +snapshot_take([12]) -> ([13], [14]); +drop([13]) -> (); +rename([11]) -> ([15]); +rename([14]) -> ([16]); +felt252_sub([15], [16]) -> ([17]); +store_temp([17]) -> ([17]); +felt252_is_zero([17]) { fallthrough() 2918([18]) }; +branch_align() -> (); +struct_construct() -> ([19]); +enum_init([19]) -> ([20]); +store_temp([20]) -> ([21]); +jump() { 2923() }; +branch_align() -> (); +drop>([18]) -> (); +struct_construct() -> ([22]); +enum_init([22]) -> ([23]); +store_temp([23]) -> ([21]); +bool_not_impl([21]) -> ([24]); +store_temp([24]) -> ([24]); +enum_match([24]) { fallthrough([25]) 2945([26]) }; +branch_align() -> (); +drop([25]) -> (); +drop([7]) -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([4]) -> (); +array_new() -> ([27]); +felt252_const<25936191677694277552149992725516921697451103245639728>() -> ([28]); +store_temp([28]) -> ([28]); +array_append([27], [28]) -> ([29]); +struct_construct() -> ([30]); +struct_construct>>([30], [29]) -> ([31]); +enum_init, 1>([31]) -> ([32]); +store_temp([0]) -> ([33]); +store_temp([1]) -> ([34]); +store_temp([2]) -> ([35]); +store_temp([3]) -> ([36]); +store_temp>([32]) -> ([37]); +return([33], [34], [35], [36], [37]); +branch_align() -> (); +drop([26]) -> (); +dup([6]) -> ([6], [39]); +contract_address_to_felt252([39]) -> ([38]); +snapshot_take([38]) -> ([40], [41]); +drop([40]) -> (); +felt252_const<0>() -> ([42]); +snapshot_take([42]) -> ([43], [44]); +drop([43]) -> (); +rename([41]) -> ([45]); +rename([44]) -> ([46]); +felt252_sub([45], [46]) -> ([47]); +store_temp([47]) -> ([47]); +felt252_is_zero([47]) { fallthrough() 2964([48]) }; +branch_align() -> (); +struct_construct() -> ([49]); +enum_init([49]) -> ([50]); +store_temp([50]) -> ([51]); +jump() { 2969() }; +branch_align() -> (); +drop>([48]) -> (); +struct_construct() -> ([52]); +enum_init([52]) -> ([53]); +store_temp([53]) -> ([51]); +bool_not_impl([51]) -> ([54]); +store_temp([54]) -> ([54]); +enum_match([54]) { fallthrough([55]) 2991([56]) }; +branch_align() -> (); +drop([55]) -> (); +drop([7]) -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([4]) -> (); +array_new() -> ([57]); +felt252_const<395754877894504967531585582359572169455970492464>() -> ([58]); +store_temp([58]) -> ([58]); +array_append([57], [58]) -> ([59]); +struct_construct() -> ([60]); +struct_construct>>([60], [59]) -> ([61]); +enum_init, 1>([61]) -> ([62]); +store_temp([0]) -> ([63]); +store_temp([1]) -> ([64]); +store_temp([2]) -> ([65]); +store_temp([3]) -> ([66]); +store_temp>([62]) -> ([67]); +return([63], [64], [65], [66], [67]); +branch_align() -> (); +drop([56]) -> (); +struct_deconstruct([4]) -> ([68], [69], [70], [71], [72], [73]); +snapshot_take([72]) -> ([74], [75]); +store_temp([0]) -> ([81]); +store_temp([1]) -> ([82]); +store_temp([2]) -> ([83]); +store_temp([3]) -> ([84]); +store_temp([75]) -> ([85]); +dup([5]) -> ([5], [86]); +store_temp([86]) -> ([86]); +function_call([81], [82], [83], [84], [85], [86]) -> ([76], [77], [78], [79], [80]); +enum_match>([80]) { fallthrough([87]) 3171([88]) }; +branch_align() -> (); +struct_deconstruct>([87]) -> ([89]); +store_temp([76]) -> ([92]); +store_temp([89]) -> ([93]); +dup([7]) -> ([7], [94]); +store_temp([94]) -> ([94]); +function_call([92], [93], [94]) -> ([90], [91]); +enum_match>([91]) { fallthrough([95]) 3154([96]) }; +branch_align() -> (); +struct_deconstruct>([95]) -> ([97]); +store_temp([90]) -> ([103]); +store_temp([77]) -> ([104]); +store_temp([78]) -> ([105]); +store_temp([79]) -> ([106]); +store_temp([74]) -> ([107]); +dup([5]) -> ([5], [108]); +store_temp([108]) -> ([108]); +store_temp([97]) -> ([109]); +function_call([103], [104], [105], [106], [107], [108], [109]) -> ([98], [99], [100], [101], [102]); +enum_match>([102]) { fallthrough([110]) 3138([111]) }; +branch_align() -> (); +struct_deconstruct>([110]) -> ([112], [113]); +drop([113]) -> (); +snapshot_take([112]) -> ([114], [115]); +store_temp([98]) -> ([121]); +store_temp([99]) -> ([122]); +store_temp([100]) -> ([123]); +store_temp([101]) -> ([124]); +store_temp([115]) -> ([125]); +dup([6]) -> ([6], [126]); +store_temp([126]) -> ([126]); +function_call([121], [122], [123], [124], [125], [126]) -> ([116], [117], [118], [119], [120]); +enum_match>([120]) { fallthrough([127]) 3121([128]) }; +branch_align() -> (); +struct_deconstruct>([127]) -> ([129]); +store_temp([116]) -> ([132]); +store_temp([129]) -> ([133]); +dup([7]) -> ([7], [134]); +store_temp([134]) -> ([134]); +function_call([132], [133], [134]) -> ([130], [131]); +enum_match>([131]) { fallthrough([135]) 3104([136]) }; +branch_align() -> (); +struct_deconstruct>([135]) -> ([137]); +store_temp([130]) -> ([143]); +store_temp([117]) -> ([144]); +store_temp([118]) -> ([145]); +store_temp([119]) -> ([146]); +store_temp([114]) -> ([147]); +dup([6]) -> ([6], [148]); +store_temp([148]) -> ([148]); +store_temp([137]) -> ([149]); +function_call([143], [144], [145], [146], [147], [148], [149]) -> ([138], [139], [140], [141], [142]); +enum_match>([142]) { fallthrough([150]) 3088([151]) }; +branch_align() -> (); +struct_deconstruct>([150]) -> ([152], [153]); +drop([153]) -> (); +struct_construct([5], [6], [7]) -> ([154]); +struct_construct([68], [69], [70], [71], [152], [73]) -> ([155]); +store_temp([139]) -> ([159]); +store_temp([141]) -> ([160]); +store_temp([155]) -> ([161]); +store_temp([154]) -> ([162]); +function_call>([159], [160], [161], [162]) -> ([156], [157], [158]); +enum_match>([158]) { fallthrough([163]) 3080([164]) }; +branch_align() -> (); +struct_deconstruct>([163]) -> ([165], [166]); +drop([166]) -> (); +struct_construct() -> ([167]); +struct_construct>([165], [167]) -> ([168]); +enum_init, 0>([168]) -> ([169]); +store_temp([138]) -> ([170]); +store_temp([156]) -> ([171]); +store_temp([140]) -> ([172]); +store_temp([157]) -> ([173]); +store_temp>([169]) -> ([174]); +return([170], [171], [172], [173], [174]); +branch_align() -> (); +enum_init, 1>([164]) -> ([175]); +store_temp([138]) -> ([176]); +store_temp([156]) -> ([177]); +store_temp([140]) -> ([178]); +store_temp([157]) -> ([179]); +store_temp>([175]) -> ([180]); +return([176], [177], [178], [179], [180]); +branch_align() -> (); +drop([68]) -> (); +drop([73]) -> (); +drop([5]) -> (); +drop([71]) -> (); +drop([70]) -> (); +drop([69]) -> (); +drop([7]) -> (); +drop([6]) -> (); +enum_init, 1>([151]) -> ([181]); +store_temp([138]) -> ([182]); +store_temp([139]) -> ([183]); +store_temp([140]) -> ([184]); +store_temp([141]) -> ([185]); +store_temp>([181]) -> ([186]); +return([182], [183], [184], [185], [186]); +branch_align() -> (); +drop([70]) -> (); +drop([7]) -> (); +drop([68]) -> (); +drop([6]) -> (); +drop([69]) -> (); +drop([73]) -> (); +drop([5]) -> (); +drop([71]) -> (); +drop([114]) -> (); +enum_init, 1>([136]) -> ([187]); +store_temp([130]) -> ([188]); +store_temp([117]) -> ([189]); +store_temp([118]) -> ([190]); +store_temp([119]) -> ([191]); +store_temp>([187]) -> ([192]); +return([188], [189], [190], [191], [192]); +branch_align() -> (); +drop([70]) -> (); +drop([7]) -> (); +drop([68]) -> (); +drop([6]) -> (); +drop([69]) -> (); +drop([73]) -> (); +drop([5]) -> (); +drop([71]) -> (); +drop([114]) -> (); +enum_init, 1>([128]) -> ([193]); +store_temp([116]) -> ([194]); +store_temp([117]) -> ([195]); +store_temp([118]) -> ([196]); +store_temp([119]) -> ([197]); +store_temp>([193]) -> ([198]); +return([194], [195], [196], [197], [198]); +branch_align() -> (); +drop([70]) -> (); +drop([7]) -> (); +drop([68]) -> (); +drop([6]) -> (); +drop([69]) -> (); +drop([73]) -> (); +drop([5]) -> (); +drop([71]) -> (); +enum_init, 1>([111]) -> ([199]); +store_temp([98]) -> ([200]); +store_temp([99]) -> ([201]); +store_temp([100]) -> ([202]); +store_temp([101]) -> ([203]); +store_temp>([199]) -> ([204]); +return([200], [201], [202], [203], [204]); +branch_align() -> (); +drop([70]) -> (); +drop([7]) -> (); +drop([68]) -> (); +drop([6]) -> (); +drop([69]) -> (); +drop([73]) -> (); +drop([5]) -> (); +drop([71]) -> (); +drop([74]) -> (); +enum_init, 1>([96]) -> ([205]); +store_temp([90]) -> ([206]); +store_temp([77]) -> ([207]); +store_temp([78]) -> ([208]); +store_temp([79]) -> ([209]); +store_temp>([205]) -> ([210]); +return([206], [207], [208], [209], [210]); +branch_align() -> (); +drop([70]) -> (); +drop([7]) -> (); +drop([68]) -> (); +drop([6]) -> (); +drop([69]) -> (); +drop([73]) -> (); +drop([5]) -> (); +drop([71]) -> (); +drop([74]) -> (); +enum_init, 1>([88]) -> ([211]); +store_temp([76]) -> ([212]); +store_temp([77]) -> ([213]); +store_temp([78]) -> ([214]); +store_temp([79]) -> ([215]); +store_temp>([211]) -> ([216]); +return([212], [213], [214], [215], [216]); +struct_deconstruct([4]) -> ([8], [9], [10], [11], [12], [13]); +snapshot_take([13]) -> ([14], [15]); +dup([5]) -> ([5], [16]); +dup([6]) -> ([6], [17]); +struct_construct>([16], [17]) -> ([18]); +store_temp([0]) -> ([24]); +store_temp([1]) -> ([25]); +store_temp([2]) -> ([26]); +store_temp([3]) -> ([27]); +store_temp([15]) -> ([28]); +store_temp>([18]) -> ([29]); +function_call([24], [25], [26], [27], [28], [29]) -> ([19], [20], [21], [22], [23]); +enum_match>([23]) { fallthrough([30]) 3312([31]) }; +branch_align() -> (); +u128_const<340282366920938463463374607431768211455>() -> ([32]); +snapshot_take([32]) -> ([33], [34]); +struct_deconstruct>([30]) -> ([35]); +struct_deconstruct([35]) -> ([36], [37]); +snapshot_take([36]) -> ([38], [39]); +rename([39]) -> ([40]); +rename([34]) -> ([41]); +u128_eq([40], [41]) { fallthrough() 3218() }; +branch_align() -> (); +drop([33]) -> (); +struct_construct() -> ([42]); +enum_init([42]) -> ([43]); +struct_construct([38], [37]) -> ([44]); +store_temp([44]) -> ([45]); +store_temp([43]) -> ([46]); +jump() { 3237() }; +branch_align() -> (); +snapshot_take([37]) -> ([47], [48]); +snapshot_take([33]) -> ([49], [50]); +drop([49]) -> (); +rename([48]) -> ([51]); +rename([50]) -> ([52]); +u128_eq([51], [52]) { fallthrough() 3230() }; +branch_align() -> (); +struct_construct() -> ([53]); +enum_init([53]) -> ([54]); +store_temp([54]) -> ([55]); +jump() { 3234() }; +branch_align() -> (); +struct_construct() -> ([56]); +enum_init([56]) -> ([57]); +store_temp([57]) -> ([55]); +struct_construct([38], [47]) -> ([58]); +store_temp([58]) -> ([45]); +store_temp([55]) -> ([46]); +enum_match([46]) { fallthrough([59]) 3291([60]) }; +branch_align() -> (); +drop([59]) -> (); +store_temp([19]) -> ([63]); +store_temp([45]) -> ([64]); +store_temp([7]) -> ([65]); +function_call([63], [64], [65]) -> ([61], [62]); +enum_match>([62]) { fallthrough([66]) 3275([67]) }; +branch_align() -> (); +struct_deconstruct>([66]) -> ([68]); +struct_construct([8], [9], [10], [11], [12], [14]) -> ([69]); +store_temp([61]) -> ([75]); +store_temp([20]) -> ([76]); +store_temp([21]) -> ([77]); +store_temp([22]) -> ([78]); +store_temp([69]) -> ([79]); +store_temp([5]) -> ([80]); +store_temp([6]) -> ([81]); +store_temp([68]) -> ([82]); +function_call([75], [76], [77], [78], [79], [80], [81], [82]) -> ([70], [71], [72], [73], [74]); +enum_match>([74]) { fallthrough([83]) 3267([84]) }; +branch_align() -> (); +struct_deconstruct>([83]) -> ([85], [86]); +drop([86]) -> (); +store_temp([70]) -> ([87]); +store_temp([71]) -> ([88]); +store_temp([72]) -> ([89]); +store_temp([73]) -> ([90]); +store_temp([85]) -> ([91]); +jump() { 3303() }; +branch_align() -> (); +enum_init, 1>([84]) -> ([92]); +store_temp([70]) -> ([93]); +store_temp([71]) -> ([94]); +store_temp([72]) -> ([95]); +store_temp([73]) -> ([96]); +store_temp>([92]) -> ([97]); +return([93], [94], [95], [96], [97]); +branch_align() -> (); +drop([8]) -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([14]) -> (); +drop([12]) -> (); +drop([11]) -> (); +drop([10]) -> (); +drop([9]) -> (); +enum_init, 1>([67]) -> ([98]); +store_temp([61]) -> ([99]); +store_temp([20]) -> ([100]); +store_temp([21]) -> ([101]); +store_temp([22]) -> ([102]); +store_temp>([98]) -> ([103]); +return([99], [100], [101], [102], [103]); +branch_align() -> (); +drop([60]) -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([7]) -> (); +drop([45]) -> (); +struct_construct([8], [9], [10], [11], [12], [14]) -> ([104]); +store_temp([19]) -> ([87]); +store_temp([20]) -> ([88]); +store_temp([21]) -> ([89]); +store_temp([22]) -> ([90]); +store_temp([104]) -> ([91]); +struct_construct() -> ([105]); +struct_construct>([91], [105]) -> ([106]); +enum_init, 0>([106]) -> ([107]); +store_temp([87]) -> ([108]); +store_temp([88]) -> ([109]); +store_temp([89]) -> ([110]); +store_temp([90]) -> ([111]); +store_temp>([107]) -> ([112]); +return([108], [109], [110], [111], [112]); +branch_align() -> (); +drop([8]) -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([9]) -> (); +drop([14]) -> (); +drop([12]) -> (); +drop([11]) -> (); +drop([10]) -> (); +drop([7]) -> (); +enum_init, 1>([31]) -> ([113]); +store_temp([19]) -> ([114]); +store_temp([20]) -> ([115]); +store_temp([21]) -> ([116]); +store_temp([22]) -> ([117]); +store_temp>([113]) -> ([118]); +return([114], [115], [116], [117], [118]); +dup([6]) -> ([6], [9]); +contract_address_to_felt252([9]) -> ([8]); +snapshot_take([8]) -> ([10], [11]); +drop([10]) -> (); +felt252_const<0>() -> ([12]); +snapshot_take([12]) -> ([13], [14]); +drop([13]) -> (); +rename([11]) -> ([15]); +rename([14]) -> ([16]); +felt252_sub([15], [16]) -> ([17]); +store_temp([17]) -> ([17]); +felt252_is_zero([17]) { fallthrough() 3346([18]) }; +branch_align() -> (); +struct_construct() -> ([19]); +enum_init([19]) -> ([20]); +store_temp([20]) -> ([21]); +jump() { 3351() }; +branch_align() -> (); +drop>([18]) -> (); +struct_construct() -> ([22]); +enum_init([22]) -> ([23]); +store_temp([23]) -> ([21]); +bool_not_impl([21]) -> ([24]); +store_temp([24]) -> ([24]); +enum_match([24]) { fallthrough([25]) 3373([26]) }; +branch_align() -> (); +drop([25]) -> (); +drop([7]) -> (); +drop([6]) -> (); +drop([5]) -> (); +drop([4]) -> (); +array_new() -> ([27]); +felt252_const<101313248740993271302566317381896466254801065025584>() -> ([28]); +store_temp([28]) -> ([28]); +array_append([27], [28]) -> ([29]); +struct_construct() -> ([30]); +struct_construct>>([30], [29]) -> ([31]); +enum_init, 1>([31]) -> ([32]); +store_temp([0]) -> ([33]); +store_temp([1]) -> ([34]); +store_temp([2]) -> ([35]); +store_temp([3]) -> ([36]); +store_temp>([32]) -> ([37]); +return([33], [34], [35], [36], [37]); +branch_align() -> (); +drop([26]) -> (); +struct_deconstruct([4]) -> ([38], [39], [40], [41], [42], [43]); +dup([5]) -> ([5], [44]); +dup([6]) -> ([6], [45]); +struct_construct>([44], [45]) -> ([46]); +store_temp([0]) -> ([52]); +store_temp([1]) -> ([53]); +store_temp([2]) -> ([54]); +store_temp([3]) -> ([55]); +store_temp([43]) -> ([56]); +store_temp>([46]) -> ([57]); +dup([7]) -> ([7], [58]); +store_temp([58]) -> ([58]); +function_call([52], [53], [54], [55], [56], [57], [58]) -> ([47], [48], [49], [50], [51]); +enum_match>([51]) { fallthrough([59]) 3420([60]) }; +branch_align() -> (); +struct_deconstruct>([59]) -> ([61], [62]); +drop([62]) -> (); +struct_construct([5], [6], [7]) -> ([63]); +struct_construct([38], [39], [40], [41], [42], [61]) -> ([64]); +store_temp([48]) -> ([68]); +store_temp([50]) -> ([69]); +store_temp([64]) -> ([70]); +store_temp([63]) -> ([71]); +function_call>([68], [69], [70], [71]) -> ([65], [66], [67]); +enum_match>([67]) { fallthrough([72]) 3412([73]) }; +branch_align() -> (); +struct_deconstruct>([72]) -> ([74], [75]); +drop([75]) -> (); +struct_construct() -> ([76]); +struct_construct>([74], [76]) -> ([77]); +enum_init, 0>([77]) -> ([78]); +store_temp([47]) -> ([79]); +store_temp([65]) -> ([80]); +store_temp([49]) -> ([81]); +store_temp([66]) -> ([82]); +store_temp>([78]) -> ([83]); +return([79], [80], [81], [82], [83]); +branch_align() -> (); +enum_init, 1>([73]) -> ([84]); +store_temp([47]) -> ([85]); +store_temp([65]) -> ([86]); +store_temp([49]) -> ([87]); +store_temp([66]) -> ([88]); +store_temp>([84]) -> ([89]); +return([85], [86], [87], [88], [89]); +branch_align() -> (); +drop([38]) -> (); +drop([5]) -> (); +drop([42]) -> (); +drop([41]) -> (); +drop([40]) -> (); +drop([39]) -> (); +drop([7]) -> (); +drop([6]) -> (); +enum_init, 1>([60]) -> ([90]); +store_temp([47]) -> ([91]); +store_temp([48]) -> ([92]); +store_temp([49]) -> ([93]); +store_temp([50]) -> ([94]); +store_temp>([90]) -> ([95]); +return([91], [92], [93], [94], [95]); +store_temp([0]) -> ([5]); +store_temp([1]) -> ([6]); +store_temp([2]) -> ([7]); +function_call([5], [6], [7]) -> ([3], [4]); +enum_match>([4]) { fallthrough([8]) 3447([9]) }; +branch_align() -> (); +struct_construct>([8]) -> ([10]); +enum_init, 0>([10]) -> ([11]); +store_temp([3]) -> ([12]); +store_temp>([11]) -> ([13]); +return([12], [13]); +branch_align() -> (); +drop([9]) -> (); +array_new() -> ([14]); +felt252_const<39879774624079483812136948410799859986295>() -> ([15]); +store_temp([15]) -> ([15]); +array_append([14], [15]) -> ([16]); +struct_construct() -> ([17]); +struct_construct>>([17], [16]) -> ([18]); +enum_init, 1>([18]) -> ([19]); +store_temp([3]) -> ([20]); +store_temp>([19]) -> ([21]); +return([20], [21]); +store_temp([0]) -> ([5]); +store_temp([1]) -> ([6]); +store_temp([2]) -> ([7]); +function_call([5], [6], [7]) -> ([3], [4]); +enum_match>([4]) { fallthrough([8]) 3470([9]) }; +branch_align() -> (); +struct_construct>([8]) -> ([10]); +enum_init, 0>([10]) -> ([11]); +store_temp([3]) -> ([12]); +store_temp>([11]) -> ([13]); +return([12], [13]); +branch_align() -> (); +drop([9]) -> (); +array_new() -> ([14]); +felt252_const<39879774624085075084607933104993585622903>() -> ([15]); +store_temp([15]) -> ([15]); +array_append([14], [15]) -> ([16]); +struct_construct() -> ([17]); +struct_construct>>([17], [16]) -> ([18]); +enum_init, 1>([18]) -> ([19]); +store_temp([3]) -> ([20]); +store_temp>([19]) -> ([21]); +return([20], [21]); +u8_try_from_felt252([0], [1]) { fallthrough([2], [3]) 3488([4]) }; +branch_align() -> (); +enum_init, 0>([3]) -> ([5]); +store_temp([2]) -> ([6]); +store_temp>([5]) -> ([7]); +jump() { 3493() }; +branch_align() -> (); +struct_construct() -> ([8]); +enum_init, 1>([8]) -> ([9]); +store_temp([4]) -> ([6]); +store_temp>([9]) -> ([7]); +rename([6]) -> ([10]); +rename>([7]) -> ([11]); +return([10], [11]); +storage_base_address_const<1528802474226268325865027367859591458315299653151958663884057507666229546336>() -> ([4]); +storage_address_from_base([4]) -> ([5]); +u32_const<0>() -> ([6]); +snapshot_take([2]) -> ([7], [8]); +drop([8]) -> (); +store_temp([6]) -> ([6]); +store_temp([5]) -> ([5]); +storage_write_syscall([0], [1], [6], [5], [3]) { fallthrough([9], [10]) 3511([11], [12], [13]) }; +branch_align() -> (); +struct_construct() -> ([14]); +enum_init>, 0>([14]) -> ([15]); +store_temp([9]) -> ([16]); +store_temp([10]) -> ([17]); +store_temp>>([15]) -> ([18]); +jump() { 3516() }; +branch_align() -> (); +enum_init>, 1>([13]) -> ([19]); +store_temp([11]) -> ([16]); +store_temp([12]) -> ([17]); +store_temp>>([19]) -> ([18]); +rename>>([18]) -> ([21]); +function_call::unwrap_syscall>([21]) -> ([20]); +enum_match>([20]) { fallthrough([22]) 3527([23]) }; +branch_align() -> (); +struct_deconstruct>([22]) -> ([24]); +struct_construct>([7], [24]) -> ([25]); +enum_init, 0>([25]) -> ([26]); +store_temp([16]) -> ([27]); +store_temp([17]) -> ([28]); +store_temp>([26]) -> ([29]); +return([27], [28], [29]); +branch_align() -> (); +drop([7]) -> (); +enum_init, 1>([23]) -> ([30]); +store_temp([16]) -> ([31]); +store_temp([17]) -> ([32]); +store_temp>([30]) -> ([33]); +return([31], [32], [33]); +storage_base_address_const<944713526212149105522785400348068751682982210605126537021911324578866405028>() -> ([4]); +storage_address_from_base([4]) -> ([5]); +u32_const<0>() -> ([6]); +snapshot_take([2]) -> ([7], [8]); +drop([8]) -> (); +store_temp([6]) -> ([6]); +store_temp([5]) -> ([5]); +storage_write_syscall([0], [1], [6], [5], [3]) { fallthrough([9], [10]) 3549([11], [12], [13]) }; +branch_align() -> (); +struct_construct() -> ([14]); +enum_init>, 0>([14]) -> ([15]); +store_temp([9]) -> ([16]); +store_temp([10]) -> ([17]); +store_temp>>([15]) -> ([18]); +jump() { 3554() }; +branch_align() -> (); +enum_init>, 1>([13]) -> ([19]); +store_temp([11]) -> ([16]); +store_temp([12]) -> ([17]); +store_temp>>([19]) -> ([18]); +rename>>([18]) -> ([21]); +function_call::unwrap_syscall>([21]) -> ([20]); +enum_match>([20]) { fallthrough([22]) 3565([23]) }; +branch_align() -> (); +struct_deconstruct>([22]) -> ([24]); +struct_construct>([7], [24]) -> ([25]); +enum_init, 0>([25]) -> ([26]); +store_temp([16]) -> ([27]); +store_temp([17]) -> ([28]); +store_temp>([26]) -> ([29]); +return([27], [28], [29]); +branch_align() -> (); +drop([7]) -> (); +enum_init, 1>([23]) -> ([30]); +store_temp([16]) -> ([31]); +store_temp([17]) -> ([32]); +store_temp>([30]) -> ([33]); +return([31], [32], [33]); +storage_base_address_const<134830404806214277570220174593674215737759987247891306080029841794115377321>() -> ([4]); +u8_to_felt252([3]) -> ([5]); +storage_address_from_base([4]) -> ([6]); +u32_const<0>() -> ([7]); +snapshot_take([2]) -> ([8], [9]); +drop([9]) -> (); +store_temp([7]) -> ([7]); +store_temp([6]) -> ([6]); +storage_write_syscall([0], [1], [7], [6], [5]) { fallthrough([10], [11]) 3588([12], [13], [14]) }; +branch_align() -> (); +struct_construct() -> ([15]); +enum_init>, 0>([15]) -> ([16]); +store_temp([10]) -> ([17]); +store_temp([11]) -> ([18]); +store_temp>>([16]) -> ([19]); +jump() { 3593() }; +branch_align() -> (); +enum_init>, 1>([14]) -> ([20]); +store_temp([12]) -> ([17]); +store_temp([13]) -> ([18]); +store_temp>>([20]) -> ([19]); +rename>>([19]) -> ([22]); +function_call::unwrap_syscall>([22]) -> ([21]); +enum_match>([21]) { fallthrough([23]) 3604([24]) }; +branch_align() -> (); +struct_deconstruct>([23]) -> ([25]); +struct_construct>([8], [25]) -> ([26]); +enum_init, 0>([26]) -> ([27]); +store_temp([17]) -> ([28]); +store_temp([18]) -> ([29]); +store_temp>([27]) -> ([30]); +return([28], [29], [30]); +branch_align() -> (); +drop([8]) -> (); +enum_init, 1>([24]) -> ([31]); +store_temp([17]) -> ([32]); +store_temp([18]) -> ([33]); +store_temp>([31]) -> ([34]); +return([32], [33], [34]); +storage_base_address_const<603278275252936218847294002513349627170936020082667936993356353388973422646>() -> ([4]); +u32_const<0>() -> ([5]); +store_temp([0]) -> ([9]); +store_temp([1]) -> ([10]); +store_temp([5]) -> ([11]); +store_temp([4]) -> ([12]); +store_temp([3]) -> ([13]); +function_call([9], [10], [11], [12], [13]) -> ([6], [7], [8]); +rename>>([8]) -> ([15]); +function_call::unwrap_syscall>([15]) -> ([14]); +enum_match>([14]) { fallthrough([16]) 3632([17]) }; +branch_align() -> (); +snapshot_take([2]) -> ([18], [19]); +drop([19]) -> (); +struct_deconstruct>([16]) -> ([20]); +struct_construct>([18], [20]) -> ([21]); +enum_init, 0>([21]) -> ([22]); +store_temp([6]) -> ([23]); +store_temp([7]) -> ([24]); +store_temp>([22]) -> ([25]); +return([23], [24], [25]); +branch_align() -> (); +drop([2]) -> (); +enum_init, 1>([17]) -> ([26]); +store_temp([6]) -> ([27]); +store_temp([7]) -> ([28]); +store_temp>([26]) -> ([29]); +return([27], [28], [29]); +snapshot_take([4]) -> ([7], [8]); +store_temp([0]) -> ([12]); +store_temp([2]) -> ([13]); +store_temp([8]) -> ([14]); +store_temp([5]) -> ([15]); +function_call([12], [13], [14], [15]) -> ([9], [10], [11]); +u32_const<0>() -> ([16]); +store_temp([1]) -> ([20]); +store_temp([3]) -> ([21]); +store_temp([16]) -> ([22]); +store_temp([11]) -> ([23]); +store_temp([6]) -> ([24]); +function_call([20], [21], [22], [23], [24]) -> ([17], [18], [19]); +rename>>([19]) -> ([26]); +function_call::unwrap_syscall>([26]) -> ([25]); +enum_match>([25]) { fallthrough([27]) 3665([28]) }; +branch_align() -> (); +struct_deconstruct>([27]) -> ([29]); +struct_construct>([7], [29]) -> ([30]); +enum_init, 0>([30]) -> ([31]); +store_temp([9]) -> ([32]); +store_temp([17]) -> ([33]); +store_temp([10]) -> ([34]); +store_temp([18]) -> ([35]); +store_temp>([31]) -> ([36]); +return([32], [33], [34], [35], [36]); +branch_align() -> (); +drop([7]) -> (); +enum_init, 1>([28]) -> ([37]); +store_temp([9]) -> ([38]); +store_temp([17]) -> ([39]); +store_temp([10]) -> ([40]); +store_temp([18]) -> ([41]); +store_temp>([37]) -> ([42]); +return([38], [39], [40], [41], [42]); +store_temp([3]) -> ([5]); +function_call::into>([5]) -> ([4]); +array_new() -> ([6]); +array_new() -> ([7]); +snapshot_take([4]) -> ([8], [9]); +drop([8]) -> (); +store_temp([9]) -> ([13]); +store_temp>([6]) -> ([14]); +store_temp>([7]) -> ([15]); +function_call([13], [14], [15]) -> ([10], [11], [12]); +drop([12]) -> (); +snapshot_take>([10]) -> ([16], [17]); +drop>([16]) -> (); +struct_construct>([17]) -> ([18]); +snapshot_take>([11]) -> ([19], [20]); +drop>([19]) -> (); +struct_construct>([20]) -> ([21]); +store_temp>([18]) -> ([18]); +store_temp>([21]) -> ([21]); +emit_event_syscall([0], [1], [18], [21]) { fallthrough([22], [23]) 3701([24], [25], [26]) }; +branch_align() -> (); +struct_construct() -> ([27]); +enum_init>, 0>([27]) -> ([28]); +store_temp([22]) -> ([29]); +store_temp([23]) -> ([30]); +store_temp>>([28]) -> ([31]); +jump() { 3706() }; +branch_align() -> (); +enum_init>, 1>([26]) -> ([32]); +store_temp([24]) -> ([29]); +store_temp([25]) -> ([30]); +store_temp>>([32]) -> ([31]); +rename>>([31]) -> ([34]); +function_call::unwrap_syscall>([34]) -> ([33]); +enum_match>([33]) { fallthrough([35]) 3717([36]) }; +branch_align() -> (); +struct_deconstruct>([35]) -> ([37]); +struct_construct>([2], [37]) -> ([38]); +enum_init, 0>([38]) -> ([39]); +store_temp([29]) -> ([40]); +store_temp([30]) -> ([41]); +store_temp>([39]) -> ([42]); +return([40], [41], [42]); +branch_align() -> (); +drop([2]) -> (); +enum_init, 1>([36]) -> ([43]); +store_temp([29]) -> ([44]); +store_temp([30]) -> ([45]); +store_temp>([43]) -> ([46]); +return([44], [45], [46]); +enum_match>>([0]) { fallthrough([1]) 3730([2]) }; +branch_align() -> (); +struct_construct>([1]) -> ([3]); +enum_init, 0>([3]) -> ([4]); +store_temp>([4]) -> ([5]); +return([5]); +branch_align() -> (); +struct_construct() -> ([6]); +struct_construct>>([6], [2]) -> ([7]); +enum_init, 1>([7]) -> ([8]); +store_temp>([8]) -> ([9]); +return([9]); +storage_address_from_base([4]) -> ([5]); +storage_read_syscall([1], [2], [3], [5]) { fallthrough([6], [7], [8]) 3768([9], [10], [11]) }; +branch_align() -> (); +store_temp([0]) -> ([14]); +store_temp([8]) -> ([15]); +function_call([14], [15]) -> ([12], [13]); +store_temp([6]) -> ([6]); +store_temp([7]) -> ([7]); +enum_match>([13]) { fallthrough([16]) 3754([17]) }; +branch_align() -> (); +enum_init>, 0>([16]) -> ([18]); +struct_construct>>>([18]) -> ([19]); +enum_init>,)>, 0>([19]) -> ([20]); +store_temp([12]) -> ([21]); +store_temp([6]) -> ([22]); +store_temp([7]) -> ([23]); +store_temp>,)>>([20]) -> ([24]); +return([21], [22], [23], [24]); +branch_align() -> (); +drop([17]) -> (); +array_new() -> ([25]); +felt252_const<110930490496575599150170734222081291576>() -> ([26]); +store_temp([26]) -> ([26]); +array_append([25], [26]) -> ([27]); +struct_construct() -> ([28]); +struct_construct>>([28], [27]) -> ([29]); +enum_init>,)>, 1>([29]) -> ([30]); +store_temp([12]) -> ([31]); +store_temp([6]) -> ([32]); +store_temp([7]) -> ([33]); +store_temp>,)>>([30]) -> ([34]); +return([31], [32], [33], [34]); +branch_align() -> (); +enum_init>, 1>([11]) -> ([35]); +struct_construct>>>([35]) -> ([36]); +enum_init>,)>, 0>([36]) -> ([37]); +store_temp([0]) -> ([38]); +store_temp([9]) -> ([39]); +store_temp([10]) -> ([40]); +store_temp>,)>>([37]) -> ([41]); +return([38], [39], [40], [41]); +enum_match>>([0]) { fallthrough([1]) 3783([2]) }; +branch_align() -> (); +struct_construct>([1]) -> ([3]); +enum_init, 0>([3]) -> ([4]); +store_temp>([4]) -> ([5]); +return([5]); +branch_align() -> (); +struct_construct() -> ([6]); +struct_construct>>([6], [2]) -> ([7]); +enum_init, 1>([7]) -> ([8]); +store_temp>([8]) -> ([9]); +return([9]); +store_temp([0]) -> ([9]); +store_temp([1]) -> ([10]); +store_temp([2]) -> ([11]); +dup([3]) -> ([3], [12]); +store_temp([12]) -> ([12]); +dup([4]) -> ([4], [13]); +store_temp([13]) -> ([13]); +function_call([9], [10], [11], [12], [13]) -> ([5], [6], [7], [8]); +enum_match>,)>>([8]) { fallthrough([14]) 3859([15]) }; +branch_align() -> (); +struct_deconstruct>>>([14]) -> ([16]); +enum_match>>([16]) { fallthrough([17]) 3848([18]) }; +branch_align() -> (); +u8_const<1>() -> ([19]); +storage_address_from_base_and_offset([4], [19]) -> ([20]); +store_temp([20]) -> ([20]); +storage_read_syscall([6], [7], [3], [20]) { fallthrough([21], [22], [23]) 3838([24], [25], [26]) }; +branch_align() -> (); +store_temp([5]) -> ([29]); +store_temp([23]) -> ([30]); +function_call([29], [30]) -> ([27], [28]); +store_temp([21]) -> ([21]); +store_temp([22]) -> ([22]); +enum_match>([28]) { fallthrough([31]) 3823([32]) }; +branch_align() -> (); +struct_construct([17], [31]) -> ([33]); +enum_init>, 0>([33]) -> ([34]); +struct_construct>>>([34]) -> ([35]); +enum_init>,)>, 0>([35]) -> ([36]); +store_temp([27]) -> ([37]); +store_temp([21]) -> ([38]); +store_temp([22]) -> ([39]); +store_temp>,)>>([36]) -> ([40]); +return([37], [38], [39], [40]); +branch_align() -> (); +drop([32]) -> (); +drop([17]) -> (); +array_new() -> ([41]); +felt252_const<476442828812030857794232422692155113556837216824>() -> ([42]); +store_temp([42]) -> ([42]); +array_append([41], [42]) -> ([43]); +struct_construct() -> ([44]); +struct_construct>>([44], [43]) -> ([45]); +enum_init>,)>, 1>([45]) -> ([46]); +store_temp([27]) -> ([47]); +store_temp([21]) -> ([48]); +store_temp([22]) -> ([49]); +store_temp>,)>>([46]) -> ([50]); +return([47], [48], [49], [50]); +branch_align() -> (); +drop([17]) -> (); +enum_init>, 1>([26]) -> ([51]); +struct_construct>>>([51]) -> ([52]); +enum_init>,)>, 0>([52]) -> ([53]); +store_temp([5]) -> ([54]); +store_temp([24]) -> ([55]); +store_temp([25]) -> ([56]); +store_temp>,)>>([53]) -> ([57]); +return([54], [55], [56], [57]); +branch_align() -> (); +drop([4]) -> (); +drop([3]) -> (); +enum_init>, 1>([18]) -> ([58]); +struct_construct>>>([58]) -> ([59]); +enum_init>,)>, 0>([59]) -> ([60]); +store_temp([5]) -> ([61]); +store_temp([6]) -> ([62]); +store_temp([7]) -> ([63]); +store_temp>,)>>([60]) -> ([64]); +return([61], [62], [63], [64]); +branch_align() -> (); +drop([4]) -> (); +drop([3]) -> (); +enum_init>,)>, 1>([15]) -> ([65]); +store_temp([5]) -> ([66]); +store_temp([6]) -> ([67]); +store_temp([7]) -> ([68]); +store_temp>,)>>([65]) -> ([69]); +return([66], [67], [68], [69]); +enum_match>>([0]) { fallthrough([1]) 3874([2]) }; +branch_align() -> (); +struct_construct>([1]) -> ([3]); +enum_init, 0>([3]) -> ([4]); +store_temp>([4]) -> ([5]); +return([5]); +branch_align() -> (); +struct_construct() -> ([6]); +struct_construct>>([6], [2]) -> ([7]); +enum_init, 1>([7]) -> ([8]); +store_temp>([8]) -> ([9]); +return([9]); +drop([2]) -> (); +felt252_const<1065622543624526936256554561967983185612257046533136611876836524258158810564>() -> ([4]); +store_temp([1]) -> ([7]); +store_temp([4]) -> ([8]); +store_temp([3]) -> ([9]); +function_call([7], [8], [9]) -> ([5], [6]); +storage_base_address_from_felt252([0], [6]) -> ([10], [11]); +store_temp([10]) -> ([12]); +store_temp([5]) -> ([13]); +store_temp([11]) -> ([14]); +return([12], [13], [14]); +drop([2]) -> (); +felt252_const<337994139936370667767799129369552596157394447336989834104582481799883947719>() -> ([4]); +store_temp([1]) -> ([7]); +store_temp([4]) -> ([8]); +store_temp>([3]) -> ([9]); +function_call::hash>([7], [8], [9]) -> ([5], [6]); +storage_base_address_from_felt252([0], [6]) -> ([10], [11]); +store_temp([10]) -> ([12]); +store_temp([5]) -> ([13]); +store_temp([11]) -> ([14]); +return([12], [13], [14]); +u128s_from_felt252([0], [1]) { fallthrough([2], [3]) 3908([4], [5], [6]) }; +branch_align() -> (); +enum_init, 0>([3]) -> ([7]); +store_temp([2]) -> ([8]); +store_temp>([7]) -> ([9]); +jump() { 3915() }; +branch_align() -> (); +drop([5]) -> (); +drop([6]) -> (); +struct_construct() -> ([10]); +enum_init, 1>([10]) -> ([11]); +store_temp([4]) -> ([8]); +store_temp>([11]) -> ([9]); +rename([8]) -> ([12]); +rename>([9]) -> ([13]); +return([12], [13]); +get_execution_info_syscall([0], [1]) { fallthrough([2], [3], [4]) 3925([5], [6], [7]) }; +branch_align() -> (); +enum_init, core::array::Array::>, 0>([4]) -> ([8]); +store_temp([2]) -> ([9]); +store_temp([3]) -> ([10]); +store_temp, core::array::Array::>>([8]) -> ([11]); +jump() { 3930() }; +branch_align() -> (); +enum_init, core::array::Array::>, 1>([7]) -> ([12]); +store_temp([5]) -> ([9]); +store_temp([6]) -> ([10]); +store_temp, core::array::Array::>>([12]) -> ([11]); +rename, core::array::Array::>>([11]) -> ([14]); +function_call>::unwrap_syscall>([14]) -> ([13]); +enum_match,)>>([13]) { fallthrough([15]) 3941([16]) }; +branch_align() -> (); +struct_deconstruct>>([15]) -> ([17]); +struct_construct>>([17]) -> ([18]); +enum_init,)>, 0>([18]) -> ([19]); +store_temp([9]) -> ([20]); +store_temp([10]) -> ([21]); +store_temp,)>>([19]) -> ([22]); +return([20], [21], [22]); +branch_align() -> (); +enum_init,)>, 1>([16]) -> ([23]); +store_temp([9]) -> ([24]); +store_temp([10]) -> ([25]); +store_temp,)>>([23]) -> ([26]); +return([24], [25], [26]); +store_temp([3]) -> ([5]); +function_call([5]) -> ([4]); +array_new() -> ([6]); +array_new() -> ([7]); +snapshot_take([4]) -> ([8], [9]); +drop([8]) -> (); +store_temp([9]) -> ([13]); +store_temp>([6]) -> ([14]); +store_temp>([7]) -> ([15]); +function_call([13], [14], [15]) -> ([10], [11], [12]); +drop([12]) -> (); +snapshot_take>([10]) -> ([16], [17]); +drop>([16]) -> (); +struct_construct>([17]) -> ([18]); +snapshot_take>([11]) -> ([19], [20]); +drop>([19]) -> (); +struct_construct>([20]) -> ([21]); +store_temp>([18]) -> ([18]); +store_temp>([21]) -> ([21]); +emit_event_syscall([0], [1], [18], [21]) { fallthrough([22], [23]) 3974([24], [25], [26]) }; +branch_align() -> (); +struct_construct() -> ([27]); +enum_init>, 0>([27]) -> ([28]); +store_temp([22]) -> ([29]); +store_temp([23]) -> ([30]); +store_temp>>([28]) -> ([31]); +jump() { 3979() }; +branch_align() -> (); +enum_init>, 1>([26]) -> ([32]); +store_temp([24]) -> ([29]); +store_temp([25]) -> ([30]); +store_temp>>([32]) -> ([31]); +rename>>([31]) -> ([34]); +function_call::unwrap_syscall>([34]) -> ([33]); +enum_match>([33]) { fallthrough([35]) 3990([36]) }; +branch_align() -> (); +struct_deconstruct>([35]) -> ([37]); +struct_construct>([2], [37]) -> ([38]); +enum_init, 0>([38]) -> ([39]); +store_temp([29]) -> ([40]); +store_temp([30]) -> ([41]); +store_temp>([39]) -> ([42]); +return([40], [41], [42]); +branch_align() -> (); +drop([2]) -> (); +enum_init, 1>([36]) -> ([43]); +store_temp([29]) -> ([44]); +store_temp([30]) -> ([45]); +store_temp>([43]) -> ([46]); +return([44], [45], [46]); +snapshot_take([4]) -> ([7], [8]); +store_temp([0]) -> ([12]); +store_temp([2]) -> ([13]); +store_temp([8]) -> ([14]); +store_temp>([5]) -> ([15]); +function_call([12], [13], [14], [15]) -> ([9], [10], [11]); +u32_const<0>() -> ([16]); +store_temp([1]) -> ([20]); +store_temp([3]) -> ([21]); +store_temp([16]) -> ([22]); +store_temp([11]) -> ([23]); +store_temp([6]) -> ([24]); +function_call([20], [21], [22], [23], [24]) -> ([17], [18], [19]); +rename>>([19]) -> ([26]); +function_call::unwrap_syscall>([26]) -> ([25]); +enum_match>([25]) { fallthrough([27]) 4023([28]) }; +branch_align() -> (); +struct_deconstruct>([27]) -> ([29]); +struct_construct>([7], [29]) -> ([30]); +enum_init, 0>([30]) -> ([31]); +store_temp([9]) -> ([32]); +store_temp([17]) -> ([33]); +store_temp([10]) -> ([34]); +store_temp([18]) -> ([35]); +store_temp>([31]) -> ([36]); +return([32], [33], [34], [35], [36]); +branch_align() -> (); +drop([7]) -> (); +enum_init, 1>([28]) -> ([37]); +store_temp([9]) -> ([38]); +store_temp([17]) -> ([39]); +store_temp([10]) -> ([40]); +store_temp([18]) -> ([41]); +store_temp>([37]) -> ([42]); +return([38], [39], [40], [41], [42]); +store_temp([3]) -> ([5]); +function_call([5]) -> ([4]); +array_new() -> ([6]); +array_new() -> ([7]); +snapshot_take([4]) -> ([8], [9]); +drop([8]) -> (); +store_temp([9]) -> ([13]); +store_temp>([6]) -> ([14]); +store_temp>([7]) -> ([15]); +function_call([13], [14], [15]) -> ([10], [11], [12]); +drop([12]) -> (); +snapshot_take>([10]) -> ([16], [17]); +drop>([16]) -> (); +struct_construct>([17]) -> ([18]); +snapshot_take>([11]) -> ([19], [20]); +drop>([19]) -> (); +struct_construct>([20]) -> ([21]); +store_temp>([18]) -> ([18]); +store_temp>([21]) -> ([21]); +emit_event_syscall([0], [1], [18], [21]) { fallthrough([22], [23]) 4059([24], [25], [26]) }; +branch_align() -> (); +struct_construct() -> ([27]); +enum_init>, 0>([27]) -> ([28]); +store_temp([22]) -> ([29]); +store_temp([23]) -> ([30]); +store_temp>>([28]) -> ([31]); +jump() { 4064() }; +branch_align() -> (); +enum_init>, 1>([26]) -> ([32]); +store_temp([24]) -> ([29]); +store_temp([25]) -> ([30]); +store_temp>>([32]) -> ([31]); +rename>>([31]) -> ([34]); +function_call::unwrap_syscall>([34]) -> ([33]); +enum_match>([33]) { fallthrough([35]) 4075([36]) }; +branch_align() -> (); +struct_deconstruct>([35]) -> ([37]); +struct_construct>([2], [37]) -> ([38]); +enum_init, 0>([38]) -> ([39]); +store_temp([29]) -> ([40]); +store_temp([30]) -> ([41]); +store_temp>([39]) -> ([42]); +return([40], [41], [42]); +branch_align() -> (); +drop([2]) -> (); +enum_init, 1>([36]) -> ([43]); +store_temp([29]) -> ([44]); +store_temp([30]) -> ([45]); +store_temp>([43]) -> ([46]); +return([44], [45], [46]); +store_temp([0]) -> ([5]); +store_temp([1]) -> ([6]); +store_temp([2]) -> ([7]); +function_call([5], [6], [7]) -> ([3], [4]); +struct_deconstruct>([4]) -> ([8], [9]); +enum_match([9]) { fallthrough([10]) 4093([11]) }; +branch_align() -> (); +drop([10]) -> (); +enum_init, 0>([8]) -> ([12]); +store_temp>([12]) -> ([13]); +jump() { 4099() }; +branch_align() -> (); +drop([11]) -> (); +drop([8]) -> (); +struct_construct() -> ([14]); +enum_init, 1>([14]) -> ([15]); +store_temp>([15]) -> ([13]); +store_temp([3]) -> ([16]); +store_temp>([13]) -> ([17]); +return([16], [17]); +store_temp([0]) -> ([5]); +store_temp([1]) -> ([6]); +store_temp([2]) -> ([7]); +function_call([5], [6], [7]) -> ([3], [4]); +struct_deconstruct>([4]) -> ([8], [9]); +enum_match([9]) { fallthrough([10]) 4113([11]) }; +branch_align() -> (); +drop([10]) -> (); +enum_init, 0>([8]) -> ([12]); +store_temp>([12]) -> ([13]); +jump() { 4119() }; +branch_align() -> (); +drop([11]) -> (); +drop([8]) -> (); +struct_construct() -> ([14]); +enum_init, 1>([14]) -> ([15]); +store_temp>([15]) -> ([13]); +store_temp([3]) -> ([16]); +store_temp>([13]) -> ([17]); +return([16], [17]); +enum_match>>([0]) { fallthrough([1]) 4128([2]) }; +branch_align() -> (); +struct_construct>([1]) -> ([3]); +enum_init, 0>([3]) -> ([4]); +store_temp>([4]) -> ([5]); +return([5]); +branch_align() -> (); +struct_construct() -> ([6]); +struct_construct>>([6], [2]) -> ([7]); +enum_init, 1>([7]) -> ([8]); +store_temp>([8]) -> ([9]); +return([9]); +struct_deconstruct([4]) -> ([5], [6]); +u128_to_felt252([5]) -> ([7]); +dup([3]) -> ([3], [9]); +storage_address_from_base([9]) -> ([8]); +dup([2]) -> ([2], [10]); +storage_write_syscall([0], [1], [10], [8], [7]) { fallthrough([11], [12]) 4160([13], [14], [15]) }; +branch_align() -> (); +u128_to_felt252([6]) -> ([16]); +u8_const<1>() -> ([17]); +storage_address_from_base_and_offset([3], [17]) -> ([18]); +store_temp([11]) -> ([11]); +store_temp([18]) -> ([18]); +storage_write_syscall([11], [12], [2], [18], [16]) { fallthrough([19], [20]) 4154([21], [22], [23]) }; +branch_align() -> (); +struct_construct() -> ([24]); +enum_init>, 0>([24]) -> ([25]); +store_temp([19]) -> ([26]); +store_temp([20]) -> ([27]); +store_temp>>([25]) -> ([28]); +return([26], [27], [28]); +branch_align() -> (); +enum_init>, 1>([23]) -> ([29]); +store_temp([21]) -> ([30]); +store_temp([22]) -> ([31]); +store_temp>>([29]) -> ([32]); +return([30], [31], [32]); +branch_align() -> (); +drop([3]) -> (); +drop([6]) -> (); +drop([2]) -> (); +enum_init>, 1>([15]) -> ([33]); +store_temp([13]) -> ([34]); +store_temp([14]) -> ([35]); +store_temp>>([33]) -> ([36]); +return([34], [35], [36]); +store_temp([0]) -> ([1]); +return([1]); +enum_match([0]) { fallthrough([3]) 4184([4]) }; +branch_align() -> (); +felt252_const<271746229759260285552388728919865295615886751538523744128730118297934206697>() -> ([5]); +store_temp([5]) -> ([5]); +array_append([1], [5]) -> ([6]); +store_temp([3]) -> ([10]); +store_temp>([6]) -> ([11]); +store_temp>([2]) -> ([12]); +function_call([10], [11], [12]) -> ([7], [8], [9]); +drop([9]) -> (); +store_temp>([7]) -> ([13]); +store_temp>([8]) -> ([14]); +jump() { 4195() }; +branch_align() -> (); +felt252_const<544914742286571513055574265148471203182105283038408585630116262969508767999>() -> ([15]); +store_temp([15]) -> ([15]); +array_append([1], [15]) -> ([16]); +store_temp([4]) -> ([20]); +store_temp>([16]) -> ([21]); +store_temp>([2]) -> ([22]); +function_call([20], [21], [22]) -> ([17], [18], [19]); +drop([19]) -> (); +store_temp>([17]) -> ([13]); +store_temp>([18]) -> ([14]); +struct_construct() -> ([23]); +rename>([13]) -> ([24]); +rename>([14]) -> ([25]); +store_temp([23]) -> ([26]); +return([24], [25], [26]); +storage_address_from_base([4]) -> ([5]); +storage_read_syscall([1], [2], [3], [5]) { fallthrough([6], [7], [8]) 4232([9], [10], [11]) }; +branch_align() -> (); +store_temp([0]) -> ([14]); +store_temp([8]) -> ([15]); +function_call([14], [15]) -> ([12], [13]); +store_temp([6]) -> ([6]); +store_temp([7]) -> ([7]); +enum_match>([13]) { fallthrough([16]) 4218([17]) }; +branch_align() -> (); +enum_init>, 0>([16]) -> ([18]); +struct_construct>>>([18]) -> ([19]); +enum_init>,)>, 0>([19]) -> ([20]); +store_temp([12]) -> ([21]); +store_temp([6]) -> ([22]); +store_temp([7]) -> ([23]); +store_temp>,)>>([20]) -> ([24]); +return([21], [22], [23], [24]); +branch_align() -> (); +drop([17]) -> (); +array_new() -> ([25]); +felt252_const<476442828812030857794232422692155113556837216824>() -> ([26]); +store_temp([26]) -> ([26]); +array_append([25], [26]) -> ([27]); +struct_construct() -> ([28]); +struct_construct>>([28], [27]) -> ([29]); +enum_init>,)>, 1>([29]) -> ([30]); +store_temp([12]) -> ([31]); +store_temp([6]) -> ([32]); +store_temp([7]) -> ([33]); +store_temp>,)>>([30]) -> ([34]); +return([31], [32], [33], [34]); +branch_align() -> (); +enum_init>, 1>([11]) -> ([35]); +struct_construct>>>([35]) -> ([36]); +enum_init>,)>, 0>([36]) -> ([37]); +store_temp([0]) -> ([38]); +store_temp([9]) -> ([39]); +store_temp([10]) -> ([40]); +store_temp>,)>>([37]) -> ([41]); +return([38], [39], [40], [41]); +contract_address_to_felt252([2]) -> ([3]); +pedersen([0], [1], [3]) -> ([4], [5]); +store_temp([4]) -> ([6]); +store_temp([5]) -> ([7]); +return([6], [7]); +struct_deconstruct>([2]) -> ([3], [4]); +store_temp([0]) -> ([7]); +store_temp([1]) -> ([8]); +store_temp([3]) -> ([9]); +function_call([7], [8], [9]) -> ([5], [6]); +rename([5]) -> ([12]); +rename([6]) -> ([13]); +store_temp([4]) -> ([14]); +function_call([12], [13], [14]) -> ([10], [11]); +rename([10]) -> ([15]); +rename([11]) -> ([16]); +return([15], [16]); +enum_match, core::array::Array::>>([0]) { fallthrough([1]) 4264([2]) }; +branch_align() -> (); +struct_construct>>([1]) -> ([3]); +enum_init,)>, 0>([3]) -> ([4]); +store_temp,)>>([4]) -> ([5]); +return([5]); +branch_align() -> (); +struct_construct() -> ([6]); +struct_construct>>([6], [2]) -> ([7]); +enum_init,)>, 1>([7]) -> ([8]); +store_temp,)>>([8]) -> ([9]); +return([9]); +enum_init([0]) -> ([1]); +store_temp([1]) -> ([2]); +return([2]); +enum_init([0]) -> ([1]); +store_temp([1]) -> ([2]); +return([2]); +struct_deconstruct([1]) -> ([3], [4]); +struct_deconstruct([2]) -> ([5], [6]); +u128_overflowing_add([0], [4], [6]) { fallthrough([7], [8]) 4286([9], [10]) }; +branch_align() -> (); +struct_construct() -> ([11]); +enum_init([11]) -> ([12]); +struct_construct>([8], [12]) -> ([13]); +store_temp([7]) -> ([14]); +store_temp>([13]) -> ([15]); +jump() { 4292() }; +branch_align() -> (); +struct_construct() -> ([16]); +enum_init([16]) -> ([17]); +struct_construct>([10], [17]) -> ([18]); +store_temp([9]) -> ([14]); +store_temp>([18]) -> ([15]); +struct_deconstruct>([15]) -> ([19], [20]); +u128_overflowing_add([14], [3], [5]) { fallthrough([21], [22]) 4300([23], [24]) }; +branch_align() -> (); +struct_construct([22], [19]) -> ([25]); +struct_construct>([25], [20]) -> ([26]); +store_temp([21]) -> ([27]); +store_temp>([26]) -> ([28]); +jump() { 4320() }; +branch_align() -> (); +u128_const<1>() -> ([29]); +store_temp([29]) -> ([29]); +u128_overflowing_add([23], [19], [29]) { fallthrough([30], [31]) 4310([32], [33]) }; +branch_align() -> (); +struct_construct([24], [31]) -> ([34]); +struct_construct>([34], [20]) -> ([35]); +store_temp([30]) -> ([36]); +store_temp>([35]) -> ([37]); +jump() { 4318() }; +branch_align() -> (); +drop([20]) -> (); +struct_construct([24], [33]) -> ([38]); +struct_construct() -> ([39]); +enum_init([39]) -> ([40]); +struct_construct>([38], [40]) -> ([41]); +store_temp([32]) -> ([36]); +store_temp>([41]) -> ([37]); +rename([36]) -> ([27]); +rename>([37]) -> ([28]); +rename([27]) -> ([42]); +rename>([28]) -> ([43]); +return([42], [43]); +struct_deconstruct([1]) -> ([3], [4]); +struct_deconstruct([2]) -> ([5], [6]); +u128_overflowing_sub([0], [4], [6]) { fallthrough([7], [8]) 4333([9], [10]) }; +branch_align() -> (); +struct_construct() -> ([11]); +enum_init([11]) -> ([12]); +struct_construct>([8], [12]) -> ([13]); +store_temp([7]) -> ([14]); +store_temp>([13]) -> ([15]); +jump() { 4339() }; +branch_align() -> (); +struct_construct() -> ([16]); +enum_init([16]) -> ([17]); +struct_construct>([10], [17]) -> ([18]); +store_temp([9]) -> ([14]); +store_temp>([18]) -> ([15]); +struct_deconstruct>([15]) -> ([19], [20]); +u128_overflowing_sub([14], [3], [5]) { fallthrough([21], [22]) 4347([23], [24]) }; +branch_align() -> (); +struct_construct([22], [19]) -> ([25]); +struct_construct>([25], [20]) -> ([26]); +store_temp([21]) -> ([27]); +store_temp>([26]) -> ([28]); +jump() { 4367() }; +branch_align() -> (); +u128_const<1>() -> ([29]); +store_temp([29]) -> ([29]); +u128_overflowing_sub([23], [19], [29]) { fallthrough([30], [31]) 4357([32], [33]) }; +branch_align() -> (); +struct_construct([24], [31]) -> ([34]); +struct_construct>([34], [20]) -> ([35]); +store_temp([30]) -> ([36]); +store_temp>([35]) -> ([37]); +jump() { 4365() }; +branch_align() -> (); +drop([20]) -> (); +struct_construct([24], [33]) -> ([38]); +struct_construct() -> ([39]); +enum_init([39]) -> ([40]); +struct_construct>([38], [40]) -> ([41]); +store_temp([32]) -> ([36]); +store_temp>([41]) -> ([37]); +rename([36]) -> ([27]); +rename>([37]) -> ([28]); +rename([27]) -> ([42]); +rename>([28]) -> ([43]); +return([42], [43]); +dup([0]) -> ([0], [3]); +struct_deconstruct([3]) -> ([4], [5], [6]); +drop([5]) -> (); +drop([6]) -> (); +store_temp([4]) -> ([9]); +store_temp>([2]) -> ([10]); +function_call([9], [10]) -> ([7], [8]); +drop([8]) -> (); +dup([0]) -> ([0], [11]); +struct_deconstruct([11]) -> ([12], [13], [14]); +drop([12]) -> (); +drop([14]) -> (); +store_temp([13]) -> ([17]); +store_temp>([7]) -> ([18]); +function_call([17], [18]) -> ([15], [16]); +drop([16]) -> (); +struct_deconstruct([0]) -> ([19], [20], [21]); +drop([19]) -> (); +drop([20]) -> (); +store_temp([21]) -> ([24]); +store_temp>([15]) -> ([25]); +function_call([24], [25]) -> ([22], [23]); +drop([23]) -> (); +struct_construct() -> ([26]); +store_temp>([1]) -> ([27]); +store_temp>([22]) -> ([28]); +store_temp([26]) -> ([29]); +return([27], [28], [29]); +dup([0]) -> ([0], [3]); +struct_deconstruct([3]) -> ([4], [5], [6]); +drop([5]) -> (); +drop([6]) -> (); +store_temp([4]) -> ([9]); +store_temp>([2]) -> ([10]); +function_call([9], [10]) -> ([7], [8]); +drop([8]) -> (); +dup([0]) -> ([0], [11]); +struct_deconstruct([11]) -> ([12], [13], [14]); +drop([12]) -> (); +drop([14]) -> (); +store_temp([13]) -> ([17]); +store_temp>([7]) -> ([18]); +function_call([17], [18]) -> ([15], [16]); +drop([16]) -> (); +struct_deconstruct([0]) -> ([19], [20], [21]); +drop([19]) -> (); +drop([20]) -> (); +store_temp([21]) -> ([24]); +store_temp>([15]) -> ([25]); +function_call([24], [25]) -> ([22], [23]); +drop([23]) -> (); +struct_construct() -> ([26]); +store_temp>([1]) -> ([27]); +store_temp>([22]) -> ([28]); +store_temp([26]) -> ([29]); +return([27], [28], [29]); +rename([0]) -> ([2]); +contract_address_to_felt252([2]) -> ([3]); +snapshot_take([3]) -> ([4], [5]); +drop([4]) -> (); +store_temp([5]) -> ([8]); +store_temp>([1]) -> ([9]); +function_call([8], [9]) -> ([6], [7]); +drop([7]) -> (); +struct_construct() -> ([10]); +store_temp>([6]) -> ([11]); +store_temp([10]) -> ([12]); +return([11], [12]); + +erc20::erc20::erc_20::__external::get_name@0([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: core::array::Span::) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::get_symbol@101([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: core::array::Span::) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::get_decimals@202([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: core::array::Span::) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::get_total_supply@303([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: core::array::Span::) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::balance_of@404([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::allowance@534([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::transfer@689([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::transfer_from@836([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::approve@1009([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::increase_allowance@1156([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__external::decrease_allowance@1303([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::__constructor::constructor@1450([0]: Pedersen, [1]: RangeCheck, [2]: GasBuiltin, [3]: System, [4]: core::array::Span::) -> (Pedersen, RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +erc20::erc20::erc_20::IERC20Impl::get_name@1677([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::ContractState) -> (GasBuiltin, System, core::panics::PanicResult::<(core::felt252,)>); +core::Felt252Serde::serialize@1702([0]: felt252, [1]: Array) -> (Array, Unit); +erc20::erc20::erc_20::IERC20Impl::get_symbol@1708([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::ContractState) -> (GasBuiltin, System, core::panics::PanicResult::<(core::felt252,)>); +erc20::erc20::erc_20::IERC20Impl::get_decimals@1733([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: erc20::erc20::erc_20::ContractState) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::integer::u8,)>); +core::integer::U8Serde::serialize@1761([0]: u8, [1]: Array) -> (Array, Unit); +erc20::erc20::erc_20::IERC20Impl::get_total_supply@1773([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: erc20::erc20::erc_20::ContractState) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::integer::u256,)>); +core::integer::u256Serde::serialize@1801([0]: core::integer::u256, [1]: Array) -> (Array, Unit); +core::starknet::contract_address::ContractAddressSerde::deserialize@1816([0]: RangeCheck, [1]: core::array::Span::) -> (RangeCheck, core::array::Span::, core::option::Option::); +erc20::erc20::erc_20::IERC20Impl::balance_of@1840([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(core::integer::u256,)>); +erc20::erc20::erc_20::IERC20Impl::allowance@1872([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: ContractAddress) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(core::integer::u256,)>); +core::integer::u256Serde::deserialize@1905([0]: RangeCheck, [1]: core::array::Span::) -> (RangeCheck, core::array::Span::, core::option::Option::); +erc20::erc20::erc_20::IERC20Impl::transfer@1934([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::IERC20Impl::transfer_from@1981([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: ContractAddress, [7]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::IERC20Impl::approve@2055([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::IERC20Impl::increase_allowance@2102([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::IERC20Impl::decrease_allowance@2205([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +core::Felt252Serde::deserialize@2308([0]: core::array::Span::) -> (core::array::Span::, core::option::Option::); +core::integer::U8Serde::deserialize@2337([0]: RangeCheck, [1]: core::array::Span::) -> (RangeCheck, core::array::Span::, core::option::Option::); +erc20::erc20::erc_20::constructor@2379([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: felt252, [6]: felt252, [7]: u8, [8]: core::integer::u256, [9]: ContractAddress) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::name::InternalContractStateImpl::read@2589([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::name::ContractState) -> (GasBuiltin, System, core::panics::PanicResult::<(core::felt252,)>); +erc20::erc20::erc_20::symbol::InternalContractStateImpl::read@2624([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::symbol::ContractState) -> (GasBuiltin, System, core::panics::PanicResult::<(core::felt252,)>); +erc20::erc20::erc_20::decimals::InternalContractStateImpl::read@2659([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: erc20::erc20::erc_20::decimals::ContractState) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::integer::u8,)>); +erc20::erc20::erc_20::total_supply::InternalContractStateImpl::read@2697([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: erc20::erc20::erc_20::total_supply::ContractState) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::integer::u256,)>); +core::integer::U128Serde::serialize@2735([0]: u128, [1]: Array) -> (Array, Unit); +erc20::erc20::erc_20::balances::InternalContractStateImpl::read@2747([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::balances::ContractState, [5]: ContractAddress) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(core::integer::u256,)>); +erc20::erc20::erc_20::allowances::InternalContractStateImpl::read@2791([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::allowances::ContractState, [5]: Tuple) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(core::integer::u256,)>); +core::integer::U128Serde::deserialize@2835([0]: RangeCheck, [1]: core::array::Span::) -> (RangeCheck, core::array::Span::, core::option::Option::); +core::starknet::info::get_caller_address@2877([0]: GasBuiltin, [1]: System) -> (GasBuiltin, System, core::panics::PanicResult::<(core::starknet::contract_address::ContractAddress,)>); +erc20::erc20::erc_20::StorageImpl::transfer_helper@2901([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: ContractAddress, [7]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::StorageImpl::spend_allowance@3188([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: ContractAddress, [7]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::StorageImpl::approve_helper@3329([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::ContractState, [5]: ContractAddress, [6]: ContractAddress, [7]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +core::integer::U256Add::add@3436([0]: RangeCheck, [1]: core::integer::u256, [2]: core::integer::u256) -> (RangeCheck, core::panics::PanicResult::<(core::integer::u256,)>); +core::integer::U256Sub::sub@3459([0]: RangeCheck, [1]: core::integer::u256, [2]: core::integer::u256) -> (RangeCheck, core::panics::PanicResult::<(core::integer::u256,)>); +core::integer::Felt252TryIntoU8::try_into@3482([0]: RangeCheck, [1]: felt252) -> (RangeCheck, core::option::Option::); +erc20::erc20::erc_20::name::InternalContractStateImpl::write@3496([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::name::ContractState, [3]: felt252) -> (GasBuiltin, System, core::panics::PanicResult::<(erc20::erc20::erc_20::name::ContractState, ())>); +erc20::erc20::erc_20::symbol::InternalContractStateImpl::write@3534([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::symbol::ContractState, [3]: felt252) -> (GasBuiltin, System, core::panics::PanicResult::<(erc20::erc20::erc_20::symbol::ContractState, ())>); +erc20::erc20::erc_20::decimals::InternalContractStateImpl::write@3572([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::decimals::ContractState, [3]: u8) -> (GasBuiltin, System, core::panics::PanicResult::<(erc20::erc20::erc_20::decimals::ContractState, ())>); +erc20::erc20::erc_20::total_supply::InternalContractStateImpl::write@3611([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::total_supply::ContractState, [3]: core::integer::u256) -> (GasBuiltin, System, core::panics::PanicResult::<(erc20::erc20::erc_20::total_supply::ContractState, ())>); +erc20::erc20::erc_20::balances::InternalContractStateImpl::write@3639([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::balances::ContractState, [5]: ContractAddress, [6]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::balances::ContractState, ())>); +erc20::erc20::erc_20::ContractStateEventEmitter::emit::>@3674([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::ContractState, [3]: erc20::erc20::erc_20::Event) -> (GasBuiltin, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +core::starknet::SyscallResultTraitImpl::::unwrap_syscall@3724([0]: core::result::Result::>) -> (core::panics::PanicResult::<(core::felt252,)>); +core::starknet::storage_access::StoreU8::read@3736([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: u32, [4]: StorageBaseAddress) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::result::Result::>,)>); +core::starknet::SyscallResultTraitImpl::::unwrap_syscall@3777([0]: core::result::Result::>) -> (core::panics::PanicResult::<(core::integer::u8,)>); +core::integer::Storeu256::read@3789([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: u32, [4]: StorageBaseAddress) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::result::Result::>,)>); +core::starknet::SyscallResultTraitImpl::::unwrap_syscall@3868([0]: core::result::Result::>) -> (core::panics::PanicResult::<(core::integer::u256,)>); +erc20::erc20::erc_20::balances::InternalContractStateImpl::address@3880([0]: RangeCheck, [1]: Pedersen, [2]: erc20::erc20::erc_20::balances::ContractState, [3]: ContractAddress) -> (RangeCheck, Pedersen, StorageBaseAddress); +erc20::erc20::erc_20::allowances::InternalContractStateImpl::address@3891([0]: RangeCheck, [1]: Pedersen, [2]: erc20::erc20::erc_20::allowances::ContractState, [3]: Tuple) -> (RangeCheck, Pedersen, StorageBaseAddress); +core::integer::u128_try_from_felt252@3902([0]: RangeCheck, [1]: felt252) -> (RangeCheck, core::option::Option::); +core::starknet::info::get_execution_info@3918([0]: GasBuiltin, [1]: System) -> (GasBuiltin, System, core::panics::PanicResult::<(core::box::Box::,)>); +erc20::erc20::erc_20::ContractStateEventEmitter::emit::@3947([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::ContractState, [3]: erc20::erc20::erc_20::Transfer) -> (GasBuiltin, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +erc20::erc20::erc_20::allowances::InternalContractStateImpl::write@3997([0]: RangeCheck, [1]: GasBuiltin, [2]: Pedersen, [3]: System, [4]: erc20::erc20::erc_20::allowances::ContractState, [5]: Tuple, [6]: core::integer::u256) -> (RangeCheck, GasBuiltin, Pedersen, System, core::panics::PanicResult::<(erc20::erc20::erc_20::allowances::ContractState, ())>); +erc20::erc20::erc_20::ContractStateEventEmitter::emit::@4032([0]: GasBuiltin, [1]: System, [2]: erc20::erc20::erc_20::ContractState, [3]: erc20::erc20::erc_20::Approval) -> (GasBuiltin, System, core::panics::PanicResult::<(erc20::erc20::erc_20::ContractState, ())>); +core::integer::u256_checked_add@4082([0]: RangeCheck, [1]: core::integer::u256, [2]: core::integer::u256) -> (RangeCheck, core::option::Option::); +core::integer::u256_checked_sub@4102([0]: RangeCheck, [1]: core::integer::u256, [2]: core::integer::u256) -> (RangeCheck, core::option::Option::); +core::starknet::SyscallResultTraitImpl::<()>::unwrap_syscall@4122([0]: core::result::Result::<(), core::array::Array::>) -> (core::panics::PanicResult::<((),)>); +core::integer::Storeu256::write@4134([0]: GasBuiltin, [1]: System, [2]: u32, [3]: StorageBaseAddress, [4]: core::integer::u256) -> (GasBuiltin, System, core::result::Result::<(), core::array::Array::>); +core::traits::TIntoT::::into@4169([0]: erc20::erc20::erc_20::Event) -> (erc20::erc20::erc_20::Event); +erc20::erc20::erc_20::EventIsEvent::append_keys_and_data@4171([0]: erc20::erc20::erc_20::Event, [1]: Array, [2]: Array) -> (Array, Array, Unit); +core::starknet::storage_access::StoreU128::read@4200([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: u32, [4]: StorageBaseAddress) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::result::Result::>,)>); +core::hash::LegacyHashContractAddress::hash@4241([0]: Pedersen, [1]: felt252, [2]: ContractAddress) -> (Pedersen, felt252); +core::hash::TupleSize2LegacyHash::::hash@4246([0]: Pedersen, [1]: felt252, [2]: Tuple) -> (Pedersen, felt252); +core::starknet::SyscallResultTraitImpl::>::unwrap_syscall@4258([0]: core::result::Result::, core::array::Array::>) -> (core::panics::PanicResult::<(core::box::Box::,)>); +erc20::erc20::erc_20::EventTransferIntoEvent::into@4270([0]: erc20::erc20::erc_20::Transfer) -> (erc20::erc20::erc_20::Event); +erc20::erc20::erc_20::EventApprovalIntoEvent::into@4273([0]: erc20::erc20::erc_20::Approval) -> (erc20::erc20::erc_20::Event); +core::integer::u256_overflowing_add@4276([0]: RangeCheck, [1]: core::integer::u256, [2]: core::integer::u256) -> (RangeCheck, Tuple); +core::integer::u256_overflow_sub@4323([0]: RangeCheck, [1]: core::integer::u256, [2]: core::integer::u256) -> (RangeCheck, Tuple); +erc20::erc20::erc_20::TransferIsEvent::append_keys_and_data@4370([0]: erc20::erc20::erc_20::Transfer, [1]: Array, [2]: Array) -> (Array, Array, Unit); +erc20::erc20::erc_20::ApprovalIsEvent::append_keys_and_data@4398([0]: erc20::erc20::erc_20::Approval, [1]: Array, [2]: Array) -> (Array, Array, Unit); +core::starknet::contract_address::ContractAddressSerde::serialize@4426([0]: ContractAddress, [1]: Array) -> (Array, Unit); diff --git a/cairo_programs/get_block_hash_basic.cairo b/cairo_programs/get_block_hash_basic.cairo new file mode 100644 index 000000000..09098391b --- /dev/null +++ b/cairo_programs/get_block_hash_basic.cairo @@ -0,0 +1,17 @@ +#[starknet::contract] + +mod GetBlockHashBasic { + use core::debug::PrintTrait; +use core::result::ResultTrait; +use core::starknet::get_block_hash_syscall; + #[storage] + struct Storage { + } + + #[external(v0)] + fn get_block_hash(self: @ContractState, block_number: u64) -> felt252 { + //block_number.print(); + get_block_hash_syscall(block_number).unwrap() + } + +} \ No newline at end of file diff --git a/cairo_programs/wallet.sierra b/cairo_programs/wallet.sierra new file mode 100644 index 000000000..51f9a924c --- /dev/null +++ b/cairo_programs/wallet.sierra @@ -0,0 +1,1430 @@ +{ + "sierra_program": [ + "0x1", + "0x3", + "0x0", + "0x2", + "0x2", + "0x0", + "0x110", + "0xf0", + "0x25", + "0x52616e6765436865636b", + "0x800000000000000100000000000000000000000000000000", + "0x537472756374", + "0x800000000000000f00000000000000000000000000000001", + "0x0", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x800000000000000f00000000000000000000000000000002", + "0x1", + "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", + "0x4172726179", + "0x800000000000000300000000000000000000000000000001", + "0x8", + "0x800000000000000300000000000000000000000000000003", + "0x3", + "0x4", + "0x456e756d", + "0xcc5e86243f861d2d64b08c35db21013e773ac5cf10097946fe0011304886d5", + "0x2", + "0x5", + "0x101dc0399934cc08fa0d6f6f2daead4e4a38cabeea1c743e1fc28d2d6e58e99", + "0x66656c74323532", + "0x800000000000000700000000000000000000000000000000", + "0x90d0203c41ad646d024845257a6eceb2f8b59b29ce7420dd518053d2edeedc", + "0x53746f7261676541646472657373", + "0x53746f726167654261736541646472657373", + "0x2633efa4b25602d1290a27d6aeb948fa53ef8a1976814cd1d78ed018207d9cd", + "0x800000000000000f00000000000000000000000000000003", + "0xc", + "0x289f3ec570490cc3a75d679992a6fbe6de8132318d9d268c66b360184dfa286", + "0xd", + "0x75313238", + "0x800000000000000700000000000000000000000000000003", + "0x25e2ca4b84968c2d8b83ef476ca8549410346b00836ce79beaf538155990bb2", + "0xf", + "0x800000000000000700000000000000000000000000000002", + "0x33dd38c898783061cd5539eddd96ee07d9522f364cb597d41a5d52b5c33314d", + "0x10", + "0x38ebd195e334343351be418d9529f6ec84f863f4b4de353979c00728b133d95", + "0x11", + "0x426f78", + "0x800000000000000700000000000000000000000000000001", + "0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7", + "0x13", + "0x10203be321c62a7bd4c060d69539c1fbe065baa9e253c74d2cc48be163e259", + "0x15", + "0x3520cd02f0e8297127614983b88bdaefde065b3fb4003d1a9d69b11592f6415", + "0x17", + "0x208991af02aa9b701a77c2c14af12d805ccecd643d794ba6794d824caf0095c", + "0x18", + "0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511", + "0x536e617073686f74", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x1b", + "0x1c", + "0x39d7e2f385e5d511ae0a83d1ae4f716c2c908fa7833dd212825a421b655f6c8", + "0x1e", + "0x4275696c74696e436f737473", + "0x53797374656d", + "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", + "0x1d", + "0x753332", + "0x4761734275696c74696e", + "0x92", + "0x7265766f6b655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f6c656e", + "0x736e617073686f745f74616b65", + "0x23", + "0x64726f70", + "0x7533325f636f6e7374", + "0x72656e616d65", + "0x73746f72655f74656d70", + "0x7533325f6571", + "0x61727261795f6e6577", + "0x66656c743235325f636f6e7374", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x61727261795f617070656e64", + "0x7374727563745f636f6e737472756374", + "0x656e756d5f696e6974", + "0x22", + "0x24", + "0x21", + "0x6765745f6275696c74696e5f636f737473", + "0x20", + "0x77697468647261775f6761735f616c6c", + "0x66756e6374696f6e5f63616c6c", + "0x656e756d5f6d61746368", + "0x1f", + "0x4f7574206f6620676173", + "0x1a", + "0x6", + "0x19", + "0x4661696c656420746f20646573657269616c697a6520706172616d202331", + "0x7", + "0x16", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x14", + "0x6a756d70", + "0x756e626f78", + "0x753132385f636f6e7374", + "0x12", + "0x9", + "0x66656c743235325f616464", + "0xa", + "0xe", + "0x73746f726167655f626173655f616464726573735f636f6e7374", + "0x206f38f7e4f15e87567361213c28f235cccdaa1d7fd34c9db1dfe9489c6a091", + "0x73746f726167655f616464726573735f66726f6d5f62617365", + "0x73746f726167655f726561645f73797363616c6c", + "0xb", + "0x656d69745f6576656e745f73797363616c6c", + "0x73746f726167655f77726974655f73797363616c6c", + "0x155e08616bcbb7488110b83d2b0fbb666a76c8444c7199784579e8339c7e629", + "0x647570", + "0x753132385f746f5f66656c74323532", + "0x295", + "0xffffffffffffffff", + "0x51", + "0x44", + "0x26", + "0x27", + "0x28", + "0x3d", + "0x29", + "0x2a", + "0x2b", + "0x2c", + "0x2d", + "0x2e", + "0x31", + "0x32", + "0x2f", + "0x30", + "0x33", + "0x34", + "0x35", + "0x36", + "0x37", + "0x38", + "0x39", + "0x3a", + "0x3b", + "0x3c", + "0x3e", + "0x3f", + "0x40", + "0x41", + "0x42", + "0x43", + "0x45", + "0x46", + "0x47", + "0x48", + "0x49", + "0x4a", + "0x4b", + "0x4c", + "0x4d", + "0x4e", + "0x4f", + "0x50", + "0x52", + "0x53", + "0x54", + "0xbf", + "0xb0", + "0x80", + "0xa2", + "0x9b", + "0x55", + "0x56", + "0x57", + "0x58", + "0x59", + "0x5a", + "0x5b", + "0x5c", + "0x12d", + "0x11e", + "0xee", + "0x110", + "0x109", + "0x14b", + "0x15f", + "0x164", + "0x16e", + "0x1ac", + "0x1a4", + "0x19e", + "0x5d", + "0x1c6", + "0x5e", + "0x5f", + "0x60", + "0x61", + "0x1d9", + "0x62", + "0x63", + "0x1de", + "0x64", + "0x65", + "0x66", + "0x1e9", + "0x67", + "0x68", + "0x69", + "0x6a", + "0x6b", + "0x6c", + "0x6d", + "0x6e", + "0x6f", + "0x20a", + "0x70", + "0x71", + "0x20f", + "0x72", + "0x73", + "0x74", + "0x75", + "0x21a", + "0x76", + "0x77", + "0x230", + "0x235", + "0x240", + "0x78", + "0x79", + "0x7a", + "0x7b", + "0x7c", + "0x24d", + "0x7d", + "0x7e", + "0x7f", + "0x81", + "0x26a", + "0x82", + "0x83", + "0x84", + "0x85", + "0x86", + "0x87", + "0x88", + "0x89", + "0x8a", + "0x8b", + "0x8c", + "0x8d", + "0x8e", + "0x8f", + "0x90", + "0x91", + "0xcd", + "0x13b", + "0x152", + "0x158", + "0x175", + "0x1b4", + "0x1cc", + "0x1ef", + "0x221", + "0x247", + "0x253", + "0x255", + "0x264", + "0x270", + "0x27a", + "0x289", + "0x1815", + "0x38100602834060c0402c1409028100608040180a07018180a04018080200", + "0x2018080b8141a100b0541e08040202805068402608090202205068401e08", + "0x583e1304078101d0283420080407010060286c061a0281006160c858300f", + "0x144010060205228138204c05118404a08120144603110204408108144003", + "0x6c061c040b80a070184c102d040b00a0d0803010060288c0608040ac102a", + "0xc1e08148cc1008060206405100402608188206005068401008178200c05", + "0x4c1038040dc0a0d08030102f040180a20018d810060288c0635040d00a23", + "0xd8100821814840520814803f010f82c3d0982078081d8141a10010e82c39", + "0x20104a23020104a230201049028481048230201047230201045060201044", + "0x4c1008280381008280301008278301008251382408268301008260149605", + "0x1400a572b020104a02954a40804128a80804128a608041281012290202451", + "0xbc1008238e010082196810082c8381c082c0bc1008250bc1008280701008", + "0x20104707820104504020104707838105807820104a060201047060201045", + "0xd81008250d810082396c240826814245204048a23c04020a03604020a00f", + "0x3810582f848104d1882010472f02010592e83810582e0201059098381058", + "0x20a02d04020866104020b20c07020b01c04020941c040208a2f040208660", + "0x14018080412410122d02024510e02010472d020104a02848b408091447008", + "0x14c8630402094350402094050918c1012288301008310201008250201008", + "0x2024512e020104a02848b80809144180804194c608041641012318202451", + "0x2094050919c10122889c100828094100828014240833048240833020245c", + "0x2010500f0201043358201059350381058188201043029a4d00e04160ce08", + "0x14dc6d09020d82d040208e0809178101228978100825014245e04048a231", + "0x160d00804124101234020245134020104a02848d008091440a6f35020104a", + "0x701c082c020246104048a261040209405091841012288b41008281c01c08", + "0x20245130020104a02848c008091440a710f0381058338201047338201045", + "0x48a21e04020a0053904810082197410082c9ac1c082c1801008248202460", + "0x128e61204134ce0804164d00804164101235820245135820104a02848d608", + "0x48a25d0402094050917410122884810082818010082c8881c082c09c1008", + "0x20104712820104312820107412838105812820104a13820104304048ba08", + "0x140a053b014ea2204020920804020920f04020922707020b022040209422", + "0x38100e02814ee08028480a602e848f01307848ee1204014240802814ee08", + "0x1dc106a041740a7035048ee0834020260534020ee08060201e0506020ee08", + "0x201805029dc101e041740a6b0f048ee080e02026050e020ee08029800a05", + "0x1dc100f041a80a22041dc1022041a00a25041dc106b040300a22041dc1070", + "0x780a27041dc10050e0140a77040142405028d80a77090944412380141e08", + "0x1dc10051281456083b820ce27090880a67041dc1067041ac0a67041dc1005", + "0xbc10770403c106a029841077040b41067028b41077040acc61213814c608", + "0xbc1e082e020ee08308205a052f020ee0809020c60518820ee08098205605", + "0x3862051a820ee081a8205e051a820ee08029840a053b8200a1202970bc31", + "0x1700a56041dc10052f0140a770401424052d0e024791e0d82477090d4260f", + "0x20a8081a814f4083b82024083181400083b820780815814a8083b820ac08", + "0x14c103c028d81077040d8106a0294c8c52071dc107b3d0001c36029ec1077", + "0x48ee083e02070053f820ee08028700a053b8200a12029f8107d3e020ee12", + "0x1ac0a053b82104082a0150682091dc1081041580a053b82100082d0150280", + "0x20a60543a182477042150812230150a083b820fe082901508083b8210608", + "0x20ee0844820f605029dc1088041e80a8944048ee08430200005029dc1087", + "0xac0a8d041dc1036041a80a8c041dc108b041f80a8b041dc108a041f00a8a", + "0x23d1c8d0782120083b8211808168151e083b8208c08318151c083b820a408", + "0x148102b029f41077040d8106a02a441077041f8106702814ee08028480a90", + "0x152893491f41e084a020ee08488205a0549820ee0823020c60549020ee08", + "0x258107704258106b02a58107704014fe054a820ee08028700a053b8200a12", + "0x19c0a98041dc10973c8484e053c820ee08028940a97041dc10964a8484405", + "0x2024083181536083b820b4081581534083b82070083501532083b8213008", + "0x38108002814ee08028480a9d4e26d340f04274107704264102d02a701077", + "0x880a9f041dc109f041ac0a9f041dc10053f8153c083b8200a1c02814ee08", + "0x288106702a8810770428142121381542083b8200a2502a8010770427d3c12", + "0x20ee0809020c60552020ee083002056053c020ee082e820d40551820ee08", + "0x481005090200a053b8200a0502a994aa43c03c10a6041dc10a3040b40aa5", + "0x20d40841014d4083b8201c08408140a770401424053017424a70983c2477", + "0x200a120287010a838020ee1234021060507820ee0807820d405340302477", + "0x9444123b820d60809814d6083b8203c08078143c083b8201808070140a77", + "0x19c105d028acce123b8204e08098144e083b8200a6002814ee0811020ba05", + "0x18c10770418c1068028b41077040ac100c0298c107704094100c02814ee08", + "0x200a1c02814ee0838020a805029dc1005090140aa9029dc242d31848e005", + "0xc41077040bcc212110145e083b8205e08358145e083b8200a1e029841077", + "0x20d4051a820ee082e020ce052e020ee08189782427029781077040144a05", + "0x1dc1035040b40a38041dc10120418c0a3c041dc1013040ac0a36041dc100f", + "0x1dc1056040bc0a56041dc1005308140a770401424052d0e0783607820b408", + "0x200a5e02814ee08028480a532304954522a048ee122b04c1e0e18814ac08", + "0x2001077040481063029fc107704148102b029e8107704000105c028001077", + "0x1ec1c770420902803f83d0c0541020ee0838020d60540820ee083d0206a05", + "0x14ee08028480a86042ad06083b848fc0843814a8083b820a80835014fc7c", + "0x210107a02a1508123b8210e08000150e083b8200a1c02814ee08418210805", + "0x228107704224107e02a24107704220107c02a20107704214107b02814ee08", + "0x205a0546820ee083e020c60546020ee083d820560545820ee082a020d405", + "0x1a80a8f041dc10860419c0a053b8200a1202a391a8c4583c108e041dc108a", + "0x211e0816814fa083b820f8083181522083b820f6081581520083b820a808", + "0x1dc10050e0140a77041c0105402814ee08028480a923ea45200f042481077", + "0x152a083b8212893090880a94041dc1094041ac0a94041dc10053f8152608", + "0x118106a029e410770425c106702a5c1077042552c12138152c083b8200a25", + "0x20ee083c8205a054d020ee0809020c6054c820ee082982056054c020ee08", + "0x14ee08060210005029dc101c0414c0a053b8200a1202a6d34994c03c109b", + "0x2753812110153a083b8213a08358153a083b8200a8502a701077040143805", + "0x20ee0850020ce0550020ee084f27c242702a7c1077040144a054f020ee08", + "0xb40a78041dc10120418c0aa3041dc1013040ac0aa2041dc100f041a80aa1", + "0x700a053b8201c08400140a77040142405521e146a20782148083b8214208", + "0x1dc10a652848440553020ee0853020d60553020ee08029fc0aa5041dc1005", + "0x155e083b8215c08338155c083b82158ad0909c0aad041dc1005128155808", + "0x2bc102d02ac8107704048106302ac4107704180102b02ac0107704174106a", + "0x2d0260f091dc2408028481005029dc10050281566b258ac01e0859820ee08", + "0x14d00c091dc106a042080a6a041dc100e042040a053b8200a1202980ba12", + "0x201c05029dc10050901438085a9c01077091a010830283c10770403c106a", + "0x2044082e8144a22091dc106b0404c0a6b041dc101e0403c0a1e041dc100c", + "0x300a053b820ce082e8145667091dc10270404c0a27041dc1005300140a77", + "0xb4c61238014c6083b820c608340145a083b820560806014c6083b8204a08", + "0x780a61041dc10050e0140a77041c0105402814ee08028480a055b014ee12", + "0x1dc10051281462083b8205e61090880a2f041dc102f041ac0a2f041dc1005", + "0xd810770403c106a028d41077041701067029701077040c4bc1213814bc08", + "0xd81e082d020ee081a8205a051c020ee0809020c6051e020ee08098205605", + "0x3862052b020ee082b0205e052b020ee08029840a053b8200a1202968703c", + "0x1700a00041dc10052f0140a770401424052991824b729150247709158260f", + "0x20f4081a81500083b820240831814fe083b820a40815814f4083b8200008", + "0x20d4053f1f0f60e3b8210481401fc1e8802a081077041c0106b02a041077", + "0x210608420140a77040142405430217083041dc247e0421c0a54041dc1054", + "0x1ec0a053b82108083d0150a84091dc1087040000a87041dc10050e0140a77", + "0x20a8083501514083b82112083f01512083b82110083e01510083b8210a08", + "0x238107704228102d02a341077041f0106302a301077041ec102b02a2c1077", + "0x20ee082a020d40547820ee0843020ce05029dc1005090151c8d4622c1e08", + "0x3c1092041dc108f040b40a7d041dc107c0418c0a91041dc107b040ac0a90", + "0x14fe0549820ee08028700a053b820e0082a0140a77040142405491f52290", + "0x20ee08028940a95041dc10944984844054a020ee084a020d6054a020ee08", + "0x1530083b8208c0835014f2083b8212e08338152e083b8212a960909c0a96", + "0x265300f0426c1077041e4102d02a68107704048106302a6410770414c102b", + "0x1dc10050e0140a7704030108002814ee080e020a605029dc100509015369a", + "0x153c083b8213a9c090880a9d041dc109d041ac0a9d041dc1005428153808", + "0x3c106a02a84107704280106702a801077042793e12138153e083b8200a25", + "0x20ee08508205a053c020ee0809020c60551820ee0809820560551020ee08", + "0x2941077040143805029dc100e042000a053b8200a1202a90f0a35103c10a4", + "0x144a0556020ee0853294242202a98107704298106b02a98107704014fe05", + "0x1dc105d041a80aaf041dc10ae0419c0aae041dc10ac568484e0556820ee08", + "0x2166083b8215e081681564083b82024083181562083b820c008158156008", + "0x200a0815814260f091dc100e042280a0e041dc1012042240ab3592c5600f", + "0x1dc1070351a01c8c029c010770404c108b029a81077040201063029a01077", + "0x1dc101c042380a053b8200a120287810b90e020ee12060211a0506180ba0e", + "0x9c1077040941090028941077041ac44124781444083b8201e082e014d608", + "0x19c1c0831820ee0813821220515820ee0830020c60533820ee082e8205605", + "0x174102b028b4107704078109202814ee0807820fa05029dc100509014c62b", + "0x24c0a31179841c0818820ee0816821220517820ee0830020c60530820ee08", + "0x201c08290141e083b8200a940283810770404810121101424083b8200a08", + "0x20109602820107704014100e0297426120417410770403c10950284c1077", + "0x2024083c81426083b8201c084b8140a7704014240507821740e09048ee12", + "0x200a9402814ee08028480a055d8200a990298010770404c1098029741077", + "0x1801077041a010980297410770403c1079029a0107704030109a028301077", + "0x7010bc38020ee1230021360535020ee0835021020535020ee082e820f605", + "0x20d6084e814d6083b8203c08498143c083b820e0084e0140a77040142405", + "0x200a120289c4a120409c107704088109e028941077041a81081028881077", + "0x21020515820ee08338213e0533820ee0802a500a053b8203808298140a77", + "0x2280a0f041dc1012042240a2d31848102d041dc102b042780a63041dc106a", + "0x174108b029c01077040201063029a8107704014102b0297426123b8201e08", + "0x1ac10bd0f020ee12340211a0534030c00e3b82038703503918050e020ee08", + "0x1dc102511049440512820ee0802a840a22041dc1005500140a77040142405", + "0x14c6083b82026082e01456083b820ce083c014ce083b8204e08518144e08", + "0xac10a40297010770418c1035029781077040301063028c4107704180102b", + "0x217c36041dc242f0421c0a2f308b41c77040d4b85e1883d4a051a820ee08", + "0x2158052d020ee08070e024a6028e0107704078108e02814ee08028480a3c", + "0x1dc102d040ac0a52041dc1056042240a053b820a80829814a856091dc1036", + "0x14fc083b820b40835814f8083b820a40845814f6083b820c20831814f408", + "0x200a1202a0010bf3f820ee12000215c050014c8c0e3b820fc7c3d9e81ead", + "0x20ee084120c24b002a0c107704204105c02a0902123b820fe08578140a77", + "0x2c80a85041dc10530418c0a84041dc1046040ac0a87041dc1086042c40a86", + "0xac0a89041dc1080042cc0a053b8200a1202a210a840702110083b8210e08", + "0x231168a0702118083b82112085901516083b820a6083181514083b8208c08", + "0x20ee081e0216605029dc100e041500a053b8203c08600140a77040142405", + "0x381090041dc108d042c80a8f041dc10610418c0a8e041dc102d040ac0a8d", + "0x1ac10b302814ee0809820fa05029dc100e041500a053b8200a1202a411e8e", + "0x20ee0848821640549020ee0806020c6053e820ee0830020560548820ee08", + "0x2010083181418083b8200a08158141e083b82024084481526923e8381093", + "0x20e06a340301ead029c0107704038106b029a810770403c108b029a01077", + "0x203808578140a770401424050f021821c041dc2460042b80a602e84c1c77", + "0x144e083b820d6082e0144a083b8200a9402814ee0811020a605111ac2477", + "0x20c60531820ee0809820560515820ee0833821620533820ee081289c24b0", + "0x216605029dc100509014c22d318381061041dc102b042c80a2d041dc105d", + "0x1dc102f042c80a5e041dc105d0418c0a31041dc1013040ac0a2f041dc101e", + "0x1dc100e0430c0a0e041dc1005610140a7704048107d02970bc3107020b808", + "0x3140a0f041dc100f043100a13041dc1013041a00a13041dc1005300141e08", + "0x201808638140a77040142405381a8d00e63030c05d071dc240f098200a0f", + "0x8810770407010c8029ac107704180106302878107704174102b028701077", + "0x20ee0834020560512820ee08380219405029dc1005090140ac9040153205", + "0x3300a67041dc10220432c0a22041dc1025043200a6b041dc106a0418c0a1e", + "0xac108e02814ee08028480a630433456083b8484e08468144e083b820ce08", + "0x20ee080f020560517820ee08308219e0530820ee08168219c0516820ee08", + "0x1dc100509014b85e18838105c041dc102f043400a5e041dc106b0418c0a31", + "0x3400a3c041dc106b0418c0a36041dc101e040ac0a35041dc1063043440a05", + "0x3c10770404c10d20284c10770403810a4028e078360702070083b8206a08", + "0x3010d4029a018123b8201e0869814c0083b8200a1c029741077040143805", + "0x881077041801052029ac1077041741052028781077041a010a402814ee08", + "0x942477041a8100002814ee080e020a6050e1c0d40e3b820446b0f039aa05", + "0x1e80a6315848ee0838020000533820ee0813820f605029dc1025041e80a27", + "0x1dc102d042040a67041dc1067042040a2d041dc1063041ec0a053b8205608", + "0x2500a053b8200a1202970bc310735c5e61091dc242d338200a0f6b0145a08", + "0x1dc102f0418c0a3c041dc1061040ac0a36041dc1035043600a35041dc1005", + "0x20b8086d8140a7704014240502b6810054c814b4083b8206c086c8147008", + "0x16810770415810d9028e01077041781063028f01077040c4102b029581077", + "0x14c10df23020ee122a021bc052a020ee0829021ba0529020ee082d021b805", + "0x1e810b1029e810770400024125801400083b8208c08700140a77040142405", + "0x20ee083d82164053f020ee081c020c6053e020ee081e02056053d820ee08", + "0x20010770414c10b302814ee0809020b405029dc100509014fe7e3e038107f", + "0x2041c0841820ee0840021640541020ee081c020c60540820ee081e0205605", + "0x2114052e820ee08029800a13041dc100f0430c0a0f041dc1005610150682", + "0x1dc1013043100a5d041dc105d041a00a053b82018083e8141860091dc1012", + "0x140a770401424050f070e00e711a8d0123b8481c132e8200a13708142608", + "0x20d408318144a083b820d0081581444083b820d6086c014d6083b8200a94", + "0x7810db02814ee08028480a05718200a990299c10770408810d90289c1077", + "0x20ee0815821b20513820ee080e020c60512820ee0838020560515820ee08", + "0x21c861041dc2463043780a63041dc102d043740a2d041dc1067043700a67", + "0x21cc052f020ee081898024e5028c410770418410e002814ee08028480a2f", + "0x1dc105c0439c0a36041dc10270418c0a35041dc1025040ac0a5c041dc105e", + "0x20ee0817821d005029dc1060041f40a053b8200a12028f06c35070207808", + "0x381054041dc10380439c0a56041dc10270418c0a5a041dc1025040ac0a38", + "0x20ee08040219c05029dc10050901424087502010770901410e902950ac5a", + "0x140a77040142405098201013041dc100f043400a0f041dc100e0433c0a0e", + "0x3010d00283010770418010d102980107704048ba1213814ba083b8200a25", + "0x141c083b8200a087581410080402010770401410a4029a0100834020ee08", + "0x1dc100f04048440507820ee0807820d60507820ee0802bb00a053b8200a12", + "0x14e0083b820240829014d4083b820260829014d0083b8201c08768142608", + "0x1480a1c041dc10054a0140a7704030105302830c05d071dc1070351a01ca9", + "0x88d61e0702044083b82038084a814d6083b820c008290143c083b820ba08", + "0x3c40a0e041dc1008043c00a053b8200a120284810ef04020ee1202821dc05", + "0x200a2502814ee08028480a130402026083b8201e08790141e083b8201c08", + "0x20ee0806021e40506020ee0830021e60530020ee08091742427029741077", + "0x20ee0809020a4052e820ee0807021ea0507020ee0802821e805340201068", + "0x1480a0c041dc10054a0140a770404c10530284c1e123b820c05d093d80a60", + "0x1c0d46807020e0083b82018084a814d4083b8201e0829014d0083b8201008", + "0x3e80a053b8201e087c8141e0e091dc1012043e00a1202848ee0802821ee05", + "0x20a6052e84c247704030c0127d81418083b820100829014c0083b8201c08", + "0x20ee0835021f405029dc1068043e40a6a34048ee0802821f005029dc105d", + "0x881077041c010fc02870e0123b820d61e093ec0a6b041dc1013041480a1e", + "0x20ee0809021fe0509020ee0802821fc0512888240812820ee080e021fa05", + "0x1480a0c041dc1013041ac0a053b8201e082a014260f091dc100e041580a0e", + "0x200a9402814ee0830020a605301742477041a0181223014d0083b8201008", + "0x14c0a0f33870e012040701077041a81095029c01077041741052029a81077", + "0x30c1c1204014a454298141e362a14c0a0f02838240802948a8530283c6c54", + "0x404240802968a853070bca853074001c1204014a454298141e362a14c0a0f", + "0x200a5e2a14c1c0c17950a60f81814b836090d8110204014100f0903c1812", + "0x200a612a14c1c1c2a14c1d050704810052f150a60e060bca85307c101c12", + "0x200a6b2a14c1c0c0e150a60f83838240802978a8530719c5e542983e0c12", + "0x42c2408028201e0f0703c1e67074280a670419c1109029841068044201c12", + "0x43810050403c240f1284a1a1204014100f078381e0f1383a18052e820c008", + "0x10f04014100f0903c4412" + ], + "sierra_program_debug_info": { + "type_names": [ + [ + 0, + "RangeCheck" + ], + [ + 1, + "Unit" + ], + [ + 2, + "Tuple" + ], + [ + 3, + "core::panics::Panic" + ], + [ + 4, + "Array" + ], + [ + 5, + "Tuple>" + ], + [ + 6, + "core::panics::PanicResult::<((),)>" + ], + [ + 7, + "core::result::Result::<(), core::array::Array::>" + ], + [ + 8, + "felt252" + ], + [ + 9, + "core::result::Result::>" + ], + [ + 10, + "StorageAddress" + ], + [ + 11, + "StorageBaseAddress" + ], + [ + 12, + "wallet::wallet::SimpleWallet::balance::ContractMemberState" + ], + [ + 13, + "Tuple" + ], + [ + 14, + "core::panics::PanicResult::<(wallet::wallet::SimpleWallet::balance::ContractMemberState, ())>" + ], + [ + 15, + "u128" + ], + [ + 16, + "core::integer::u256" + ], + [ + 17, + "wallet::wallet::SimpleWallet::DummyEvent" + ], + [ + 18, + "wallet::wallet::SimpleWallet::Event" + ], + [ + 19, + "Box" + ], + [ + 20, + "core::option::Option::>" + ], + [ + 21, + "Tuple" + ], + [ + 22, + "core::panics::PanicResult::<(core::felt252,)>" + ], + [ + 23, + "wallet::wallet::SimpleWallet::ContractState" + ], + [ + 24, + "Tuple" + ], + [ + 25, + "core::panics::PanicResult::<(wallet::wallet::SimpleWallet::ContractState, ())>" + ], + [ + 26, + "core::option::Option::" + ], + [ + 27, + "Snapshot>" + ], + [ + 28, + "core::array::Span::" + ], + [ + 29, + "Tuple>" + ], + [ + 30, + "Tuple" + ], + [ + 31, + "core::panics::PanicResult::<(wallet::wallet::SimpleWallet::ContractState, core::felt252)>" + ], + [ + 32, + "BuiltinCosts" + ], + [ + 33, + "System" + ], + [ + 34, + "core::panics::PanicResult::<(core::array::Span::,)>" + ], + [ + 35, + "u32" + ], + [ + 36, + "GasBuiltin" + ] + ], + "libfunc_names": [ + [ + 0, + "revoke_ap_tracking" + ], + [ + 1, + "withdraw_gas" + ], + [ + 2, + "branch_align" + ], + [ + 3, + "struct_deconstruct>" + ], + [ + 4, + "array_len" + ], + [ + 5, + "snapshot_take" + ], + [ + 6, + "drop" + ], + [ + 7, + "u32_const<0>" + ], + [ + 8, + "rename" + ], + [ + 9, + "store_temp" + ], + [ + 10, + "store_temp" + ], + [ + 11, + "u32_eq" + ], + [ + 12, + "array_new" + ], + [ + 13, + "felt252_const<7733229381460288120802334208475838166080759535023995805565484692595>" + ], + [ + 14, + "store_temp" + ], + [ + 15, + "array_append" + ], + [ + 16, + "struct_construct" + ], + [ + 17, + "struct_construct>>" + ], + [ + 18, + "enum_init,)>, 1>" + ], + [ + 19, + "store_temp" + ], + [ + 20, + "store_temp" + ], + [ + 21, + "store_temp,)>>" + ], + [ + 22, + "get_builtin_costs" + ], + [ + 23, + "store_temp" + ], + [ + 24, + "withdraw_gas_all" + ], + [ + 25, + "struct_construct" + ], + [ + 26, + "struct_construct" + ], + [ + 27, + "store_temp" + ], + [ + 28, + "function_call" + ], + [ + 29, + "enum_match>" + ], + [ + 30, + "struct_deconstruct>" + ], + [ + 31, + "drop" + ], + [ + 32, + "snapshot_take" + ], + [ + 33, + "drop" + ], + [ + 34, + "store_temp>" + ], + [ + 35, + "function_call" + ], + [ + 36, + "drop" + ], + [ + 37, + "snapshot_take>" + ], + [ + 38, + "drop>" + ], + [ + 39, + "struct_construct>" + ], + [ + 40, + "struct_construct>>" + ], + [ + 41, + "enum_init,)>, 0>" + ], + [ + 42, + "felt252_const<375233589013918064796019>" + ], + [ + 43, + "drop>" + ], + [ + 44, + "store_temp>" + ], + [ + 45, + "function_call" + ], + [ + 46, + "enum_match>" + ], + [ + 47, + "function_call" + ], + [ + 48, + "enum_match>" + ], + [ + 49, + "drop>" + ], + [ + 50, + "felt252_const<485748461484230571791265682659113160264223489397539653310998840191492913>" + ], + [ + 51, + "function_call" + ], + [ + 52, + "struct_deconstruct" + ], + [ + 53, + "snapshot_take" + ], + [ + 54, + "store_temp" + ], + [ + 55, + "function_call" + ], + [ + 56, + "enum_match>" + ], + [ + 57, + "struct_deconstruct>" + ], + [ + 58, + "struct_construct>" + ], + [ + 59, + "enum_init, 0>" + ], + [ + 60, + "store_temp>" + ], + [ + 61, + "drop" + ], + [ + 62, + "enum_init, 1>" + ], + [ + 63, + "rename" + ], + [ + 64, + "struct_construct" + ], + [ + 65, + "store_temp" + ], + [ + 66, + "array_snapshot_pop_front" + ], + [ + 67, + "enum_init>, 0>" + ], + [ + 68, + "store_temp>>" + ], + [ + 69, + "store_temp>>" + ], + [ + 70, + "jump" + ], + [ + 71, + "enum_init>, 1>" + ], + [ + 72, + "enum_match>>" + ], + [ + 73, + "unbox" + ], + [ + 74, + "enum_init, 0>" + ], + [ + 75, + "store_temp>" + ], + [ + 76, + "enum_init, 1>" + ], + [ + 77, + "u128_const<2>" + ], + [ + 78, + "u128_const<0>" + ], + [ + 79, + "struct_construct" + ], + [ + 80, + "struct_construct" + ], + [ + 81, + "enum_init" + ], + [ + 82, + "store_temp" + ], + [ + 83, + "function_call>>" + ], + [ + 84, + "felt252_add" + ], + [ + 85, + "struct_deconstruct>" + ], + [ + 86, + "function_call" + ], + [ + 87, + "enum_match>" + ], + [ + 88, + "struct_deconstruct>" + ], + [ + 89, + "struct_construct>" + ], + [ + 90, + "enum_init, 0>" + ], + [ + 91, + "store_temp>" + ], + [ + 92, + "enum_init, 1>" + ], + [ + 93, + "drop>" + ], + [ + 94, + "storage_base_address_const<916907772491729262376534102982219947830828984996257231353398618781993312401>" + ], + [ + 95, + "storage_address_from_base" + ], + [ + 96, + "store_temp" + ], + [ + 97, + "storage_read_syscall" + ], + [ + 98, + "enum_init>, 0>" + ], + [ + 99, + "store_temp>>" + ], + [ + 100, + "enum_init>, 1>" + ], + [ + 101, + "rename>>" + ], + [ + 102, + "function_call::unwrap_syscall>" + ], + [ + 103, + "struct_construct>" + ], + [ + 104, + "enum_init, 0>" + ], + [ + 105, + "store_temp>" + ], + [ + 106, + "enum_init, 1>" + ], + [ + 107, + "function_call::into>" + ], + [ + 108, + "snapshot_take" + ], + [ + 109, + "drop" + ], + [ + 110, + "function_call" + ], + [ + 111, + "emit_event_syscall" + ], + [ + 112, + "enum_init>, 0>" + ], + [ + 113, + "store_temp>>" + ], + [ + 114, + "enum_init>, 1>" + ], + [ + 115, + "rename>>" + ], + [ + 116, + "function_call::unwrap_syscall>" + ], + [ + 117, + "enum_match>" + ], + [ + 118, + "struct_deconstruct>" + ], + [ + 119, + "storage_write_syscall" + ], + [ + 120, + "struct_construct>" + ], + [ + 121, + "enum_init, 0>" + ], + [ + 122, + "store_temp>" + ], + [ + 123, + "enum_init, 1>" + ], + [ + 124, + "enum_match>>" + ], + [ + 125, + "enum_match" + ], + [ + 126, + "felt252_const<604044455298473900658797727502986337863043931241839670982572839358997980713>" + ], + [ + 127, + "store_temp" + ], + [ + 128, + "function_call" + ], + [ + 129, + "enum_match>>" + ], + [ + 130, + "struct_construct>" + ], + [ + 131, + "enum_init, 0>" + ], + [ + 132, + "store_temp>" + ], + [ + 133, + "enum_init, 1>" + ], + [ + 134, + "struct_deconstruct" + ], + [ + 135, + "store_temp" + ], + [ + 136, + "function_call" + ], + [ + 137, + "dup" + ], + [ + 138, + "struct_deconstruct" + ], + [ + 139, + "drop" + ], + [ + 140, + "store_temp" + ], + [ + 141, + "function_call" + ], + [ + 142, + "rename>" + ], + [ + 143, + "rename" + ], + [ + 144, + "rename" + ], + [ + 145, + "u128_to_felt252" + ] + ], + "user_func_names": [ + [ + 0, + "wallet::wallet::SimpleWallet::__wrapper_get_balance" + ], + [ + 1, + "wallet::wallet::SimpleWallet::__wrapper_increase_balance" + ], + [ + 2, + "wallet::wallet::SimpleWallet::__wrapper_constructor" + ], + [ + 3, + "wallet::wallet::SimpleWallet::SimpleWallet::get_balance" + ], + [ + 4, + "core::Felt252Serde::serialize" + ], + [ + 5, + "core::Felt252Serde::deserialize" + ], + [ + 6, + "wallet::wallet::SimpleWallet::SimpleWallet::increase_balance" + ], + [ + 7, + "wallet::wallet::SimpleWallet::constructor" + ], + [ + 8, + "wallet::wallet::SimpleWallet::balance::InternalContractMemberStateImpl::read" + ], + [ + 9, + "wallet::wallet::SimpleWallet::ContractStateEventEmitter::emit::>" + ], + [ + 10, + "wallet::wallet::SimpleWallet::balance::InternalContractMemberStateImpl::write" + ], + [ + 11, + "core::starknet::SyscallResultTraitImpl::::unwrap_syscall" + ], + [ + 12, + "core::traits::TIntoT::::into" + ], + [ + 13, + "wallet::wallet::SimpleWallet::EventIsEvent::append_keys_and_data" + ], + [ + 14, + "core::starknet::SyscallResultTraitImpl::<()>::unwrap_syscall" + ], + [ + 15, + "wallet::wallet::SimpleWallet::DummyEventIsEvent::append_keys_and_data" + ], + [ + 16, + "core::integer::u256Serde::serialize" + ], + [ + 17, + "core::integer::U128Serde::serialize" + ] + ] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x362398bec32bc0ebb411203221a35a0301193a96f317ebe5e40be9f60d15320", + "function_idx": 1 + }, + { + "selector": "0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695", + "function_idx": 0 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [ + { + "selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "function_idx": 2 + } + ] + }, + "abi": [ + { + "type": "impl", + "name": "SimpleWallet", + "interface_name": "wallet::wallet::ISimpleWallet" + }, + { + "type": "interface", + "name": "wallet::wallet::ISimpleWallet", + "items": [ + { + "type": "function", + "name": "get_balance", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "external" + }, + { + "type": "function", + "name": "increase_balance", + "inputs": [ + { + "name": "amount", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "type": "constructor", + "name": "constructor", + "inputs": [ + { + "name": "initial_balance", + "type": "core::felt252" + } + ] + }, + { + "type": "struct", + "name": "core::integer::u256", + "members": [ + { + "name": "low", + "type": "core::integer::u128" + }, + { + "name": "high", + "type": "core::integer::u128" + } + ] + }, + { + "type": "event", + "name": "wallet::wallet::SimpleWallet::DummyEvent", + "kind": "struct", + "members": [ + { + "name": "value", + "type": "core::integer::u256", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "wallet::wallet::SimpleWallet::Event", + "kind": "enum", + "variants": [ + { + "name": "DummyEvent", + "type": "wallet::wallet::SimpleWallet::DummyEvent", + "kind": "nested" + } + ] + } + ] +} \ No newline at end of file diff --git a/fuzzer/src/main.rs b/fuzzer/src/main.rs index 2b14e11b4..07fb352f5 100644 --- a/fuzzer/src/main.rs +++ b/fuzzer/src/main.rs @@ -179,7 +179,7 @@ fn main() { entry_point_type: Some(EntryPointType::External), calldata, retdata: [Felt252::from_bytes_be(data_to_ascii(data).as_bytes())].to_vec(), - execution_resources: ExecutionResources::default(), + execution_resources: Some(ExecutionResources::default()), class_hash: Some(class_hash), storage_read_values: vec![Felt252::from_bytes_be(data_to_ascii(data).as_bytes())], accessed_storage_keys: expected_accessed_storage_keys, diff --git a/rpc_state_reader/src/lib.rs b/rpc_state_reader/src/lib.rs index 647ab5fa9..7b0125ef1 100644 --- a/rpc_state_reader/src/lib.rs +++ b/rpc_state_reader/src/lib.rs @@ -633,7 +633,7 @@ mod tests { assert_eq!(tx_trace.validate_invocation.retdata, vec![]); assert_eq!( tx_trace.validate_invocation.execution_resources, - ExecutionResources { + Some(ExecutionResources { n_steps: 790, n_memory_holes: 51, builtin_instance_counter: HashMap::from([ @@ -641,7 +641,7 @@ mod tests { ("ecdsa_builtin".to_string(), 1), ("pedersen_builtin".to_string(), 2), ]), - } + }) ); assert_eq!(tx_trace.validate_invocation.internal_calls.len(), 1); @@ -674,14 +674,14 @@ mod tests { assert_eq!(tx_trace.function_invocation.retdata, vec![0.into()]); assert_eq!( tx_trace.function_invocation.execution_resources, - ExecutionResources { + Some(ExecutionResources { n_steps: 2808, n_memory_holes: 136, builtin_instance_counter: HashMap::from([ ("range_check_builtin".to_string(), 49), ("pedersen_builtin".to_string(), 14), ]), - } + }) ); assert_eq!(tx_trace.function_invocation.internal_calls.len(), 1); assert_eq!( @@ -711,14 +711,14 @@ mod tests { assert_eq!(tx_trace.fee_transfer_invocation.retdata, vec![1.into()]); assert_eq!( tx_trace.fee_transfer_invocation.execution_resources, - ExecutionResources { + Some(ExecutionResources { n_steps: 586, n_memory_holes: 42, builtin_instance_counter: HashMap::from([ ("range_check_builtin".to_string(), 21), ("pedersen_builtin".to_string(), 4), ]), - } + }) ); assert_eq!(tx_trace.fee_transfer_invocation.internal_calls.len(), 1); } diff --git a/rpc_state_reader_sn_api/src/lib.rs b/rpc_state_reader_sn_api/src/lib.rs index 61393d32a..fee7f193e 100644 --- a/rpc_state_reader_sn_api/src/lib.rs +++ b/rpc_state_reader_sn_api/src/lib.rs @@ -1247,11 +1247,14 @@ mod starknet_in_rust_transaction_tests { assert_eq!( execution_resources, - trace - .function_invocation - .as_ref() - .unwrap() - .execution_resources + Some( + trace + .function_invocation + .as_ref() + .unwrap() + .execution_resources + .clone() + ) ); assert_eq!( internal_calls.len(), diff --git a/rust-toolchain b/rust-toolchain index 2d24a1e07..509da7f23 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "1.70.0" +channel = "nightly" components = ["rustfmt", "clippy"] profile = "minimal" diff --git a/src/core/contract_address/casm_contract_address.rs b/src/core/contract_address/casm_contract_address.rs index 537146e23..23dc701e8 100644 --- a/src/core/contract_address/casm_contract_address.rs +++ b/src/core/contract_address/casm_contract_address.rs @@ -112,7 +112,7 @@ mod tests { let expected_result; #[cfg(not(feature = "cairo_1_tests"))] { - file = File::open("starknet_programs/cairo2/contract_a.casm").unwrap(); + file = File::open("starknet_programs/raw_contract_classes/321aadcf42b0a4ad905616598d16c42fa9b87c812dc398e49b57bf77930629f.casm").unwrap(); expected_result = felt_str!( "321aadcf42b0a4ad905616598d16c42fa9b87c812dc398e49b57bf77930629f", 16 @@ -144,7 +144,7 @@ mod tests { let expected_result; #[cfg(not(feature = "cairo_1_tests"))] { - file = File::open("starknet_programs/cairo2/deploy.casm").unwrap(); + file = File::open("starknet_programs/raw_contract_classes/53ad3bfb13f39cf1a9940108be4f9c6a8d9cc48a59d5f9b3c73432f877f8cf0.casm").unwrap(); expected_result = felt_str!( "53ad3bfb13f39cf1a9940108be4f9c6a8d9cc48a59d5f9b3c73432f877f8cf0", 16 @@ -177,7 +177,7 @@ mod tests { let expected_result; #[cfg(not(feature = "cairo_1_tests"))] { - file = File::open("starknet_programs/cairo2/fibonacci.casm").unwrap(); + file = File::open("starknet_programs/raw_contract_classes/6638ce6c9bf336d1781a388668fa2206d928df5d1fa6b92e4cb41004c7e3f89.casm").unwrap(); expected_result = felt_str!( "6638ce6c9bf336d1781a388668fa2206d928df5d1fa6b92e4cb41004c7e3f89", 16 @@ -210,7 +210,7 @@ mod tests { let expected_result; #[cfg(not(feature = "cairo_1_tests"))] { - file = File::open("starknet_programs/cairo2/factorial.casm").unwrap(); + file = File::open("starknet_programs/raw_contract_classes/7c48d040ceb3183837a0aff2adf33d879f790e202eb2c4b8622005c12252641.casm").unwrap(); expected_result = felt_str!( "7c48d040ceb3183837a0aff2adf33d879f790e202eb2c4b8622005c12252641", 16 @@ -243,7 +243,7 @@ mod tests { let expected_result; #[cfg(not(feature = "cairo_1_tests"))] { - file = File::open("starknet_programs/cairo2/emit_event.casm").unwrap(); + file = File::open("starknet_programs/raw_contract_classes/3010533bd60cb0e70ac1bf776e171713f0e5229a084989d3894c171c160ace2.casm").unwrap(); expected_result = felt_str!( "3010533bd60cb0e70ac1bf776e171713f0e5229a084989d3894c171c160ace2", 16 @@ -271,7 +271,7 @@ mod tests { #[test] fn test_declare_tx_class_hash() { - let file = File::open("starknet_programs/cairo2/events.casm").unwrap(); + let file = File::open("starknet_programs/raw_contract_classes/0x472a8c75c832b112ac174abc3b46e7e79464ad52ecdad80079ddfe486ca5eef.casm").unwrap(); let reader = BufReader::new(file); let contract_class: CasmContractClass = serde_json::from_reader(reader).unwrap(); diff --git a/src/core/contract_address/sierra_contract_address.rs b/src/core/contract_address/sierra_contract_address.rs index 1bbcfb1e9..1ed854dc0 100644 --- a/src/core/contract_address/sierra_contract_address.rs +++ b/src/core/contract_address/sierra_contract_address.rs @@ -126,7 +126,8 @@ mod tests { /// Test the correctness of the compute_sierra_class_hash function for a specific testnet contract. #[test] fn test_declare_tx_from_testnet() { - let file = File::open("starknet_programs/cairo2/events.sierra").unwrap(); + let file = File::open("starknet_programs/raw_contract_classes/0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3.sierra").unwrap(); + // 0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3 let reader = BufReader::new(file); let sierra_contract_class: SierraContractClass = serde_json::from_reader(reader).unwrap(); diff --git a/src/definitions/constants.rs b/src/definitions/constants.rs index cbf706d01..0041aac7e 100644 --- a/src/definitions/constants.rs +++ b/src/definitions/constants.rs @@ -44,9 +44,9 @@ lazy_static! { 0.into(), 1.into(), 2.into(), - &0.into() | &QUERY_VERSION_BASE.clone(), - &1.into() | &QUERY_VERSION_BASE.clone(), - &2.into() | &QUERY_VERSION_BASE.clone(), + &Into::::into(0) | &QUERY_VERSION_BASE.clone(), + &Into::::into(1) | &QUERY_VERSION_BASE.clone(), + &Into::::into(2) | &QUERY_VERSION_BASE.clone(), ]; } diff --git a/src/execution/execution_entry_point.rs b/src/execution/execution_entry_point.rs index b16b500a9..cde27b4e6 100644 --- a/src/execution/execution_entry_point.rs +++ b/src/execution/execution_entry_point.rs @@ -5,6 +5,25 @@ use crate::services::api::contract_classes::deprecated_contract_class::{ }; use crate::state::cached_state::CachedState; use crate::state::StateDiff; + +#[cfg(feature = "cairo-native")] +use crate::syscalls::native_syscall_handler::NativeSyscallHandler; +#[cfg(feature = "cairo-native")] +use cairo_native::context::NativeContext; +#[cfg(feature = "cairo-native")] +use cairo_native::execution_result::NativeExecutionResult; +#[cfg(feature = "cairo-native")] +use cairo_native::executor::NativeExecutor; +#[cfg(feature = "cairo-native")] +use cairo_native::metadata::syscall_handler::SyscallHandlerMeta; +#[cfg(feature = "cairo-native")] +use cairo_native::utils::felt252_bigint; +#[cfg(feature = "cairo-native")] +use serde_json::Value; + +use super::{ + CallInfo, CallResult, CallType, OrderedEvent, OrderedL2ToL1Message, TransactionExecutionContext, +}; use crate::{ definitions::{block_context::BlockContext, constants::DEFAULT_ENTRY_POINT_SELECTOR}, runner::StarknetRunner, @@ -39,10 +58,6 @@ use cairo_vm::{ }, }; -use super::{ - CallInfo, CallResult, CallType, OrderedEvent, OrderedL2ToL1Message, TransactionExecutionContext, -}; - #[derive(Debug, Default)] pub struct ExecutionResult { pub call_info: Option, @@ -155,6 +170,41 @@ impl ExecutionEntryPoint { return Err(e); } + let n_reverted_steps = + (max_steps as usize) - resources_manager.cairo_usage.n_steps; + Ok(ExecutionResult { + call_info: None, + revert_error: Some(e.to_string()), + n_reverted_steps, + }) + } + } + } + CompiledClass::Sierra(sierra_contract_class) => { + let mut tmp_state = + CachedState::new(state.state_reader.clone(), state.contract_classes.clone()); + tmp_state.cache = state.cache.clone(); + + match self.native_execute( + &mut tmp_state, + sierra_contract_class, + tx_execution_context, + block_context, + ) { + Ok(call_info) => { + let state_diff = StateDiff::from_cached_state(tmp_state)?; + state.apply_state_update(&state_diff)?; + Ok(ExecutionResult { + call_info: Some(call_info), + revert_error: None, + n_reverted_steps: 0, + }) + } + Err(e) => { + if !support_reverted { + return Err(e); + } + let n_reverted_steps = (max_steps as usize) - resources_manager.cairo_usage.n_steps; Ok(ExecutionResult { @@ -254,7 +304,7 @@ impl ExecutionEntryPoint { entry_point_type: Some(self.entry_point_type), calldata: self.calldata.clone(), retdata, - execution_resources: execution_resources.filter_unused_builtins(), + execution_resources: Some(execution_resources.filter_unused_builtins()), events, l2_to_l1_messages, storage_read_values: starknet_storage_state.read_values, @@ -291,7 +341,7 @@ impl ExecutionEntryPoint { .iter() .map(|n| n.get_int_ref().cloned().unwrap_or_default()) .collect(), - execution_resources: execution_resources.filter_unused_builtins(), + execution_resources: Some(execution_resources.filter_unused_builtins()), events, l2_to_l1_messages, storage_read_values: starknet_storage_state.read_values, @@ -578,4 +628,170 @@ impl ExecutionEntryPoint { call_result, ) } + + #[cfg(not(feature = "cairo-native"))] + fn native_execute( + &self, + _state: &mut CachedState, + _contract_class: Arc, + _tx_execution_context: &mut TransactionExecutionContext, + _block_context: &BlockContext, + ) -> Result { + Err(TransactionError::SierraCompileError( + "This version of SiR was compiled without the Cairo Native feature".to_string(), + )) + } + + #[cfg(feature = "cairo-native")] + fn native_execute( + &self, + state: &mut CachedState, + contract_class: Arc, + tx_execution_context: &mut TransactionExecutionContext, + block_context: &BlockContext, + ) -> Result { + let entry_point = match self.entry_point_type { + EntryPointType::External => contract_class + .entry_points_by_type + .external + .iter() + .find(|entry_point| entry_point.selector == self.entry_point_selector.to_biguint()) + .unwrap(), + EntryPointType::Constructor => contract_class + .entry_points_by_type + .constructor + .iter() + .find(|entry_point| entry_point.selector == self.entry_point_selector.to_biguint()) + .unwrap(), + EntryPointType::L1Handler => contract_class + .entry_points_by_type + .l1_handler + .iter() + .find(|entry_point| entry_point.selector == self.entry_point_selector.to_biguint()) + .unwrap(), + }; + + let sierra_program = contract_class.extract_sierra_program().unwrap(); + + let native_context = NativeContext::new(); + let mut native_program = native_context.compile(&sierra_program).unwrap(); + let contract_storage_state = + ContractStorageState::new(state, self.contract_address.clone()); + + let mut syscall_handler = NativeSyscallHandler { + starknet_storage_state: contract_storage_state, + n_emitted_events: 0, + events: Vec::new(), + l2_to_l1_messages: Vec::new(), + n_sent_messages: 0, + contract_address: self.contract_address.clone(), + internal_calls: Vec::new(), + caller_address: self.caller_address.clone(), + entry_point_selector: self.entry_point_selector.clone(), + tx_execution_context: tx_execution_context.clone(), + block_context: block_context.clone(), + }; + + native_program + .insert_metadata(SyscallHandlerMeta::new(&mut syscall_handler)) + .unwrap(); + + let syscall_addr = native_program + .get_metadata::() + .unwrap() + .as_ptr() + .addr(); + + let fn_id = &sierra_program + .funcs + .iter() + .find(|x| x.id.id == (entry_point.function_idx as u64)) + .unwrap() + .id; + + let number_of_params = sierra_program.funcs[fn_id.id as usize].params.len(); + + let required_init_gas = native_program.get_required_init_gas(fn_id); + + let calldata: Vec<_> = self + .calldata + .iter() + .map(|felt| felt252_bigint(felt.to_bigint())) + .collect(); + + /* + Below we construct `params`, the Serde value that MLIR expects. It consists of the following: + + - One `null` value for each builtin that is going to be used. + - The maximum amout of gas allowed by the call. + - `syscall_addr`, the address of the syscall handler. + - `calldata`, an array of Felt arguments to the method being called. + + The code to construct it is complex and obscure for the following reason: because the amount of syscalls + to be called depends on the method, we don't know beforehand how many `null`s to append to the beginning + of the parameters. Ideally, we would like to use the `json!` macro to construct the `params`, but I found + no way of doing so; thus, string interpolation. + + To know how many `null`s to append, we fetch the total amount of arguments for the function from + the sierra program, then substract 3 from it, to account for the other arguments (gas, syscall_addr, calldata). + */ + let mut builtins_string = "".to_owned(); + for _ in 0..(number_of_params - 3) { + builtins_string.push_str(&"null,"); + } + + let params: Value = serde_json::from_str(&format!( + " + [ + {} + {}, + {}, + [ + {:?} + ] + ] + ", + builtins_string, + u64::MAX, + syscall_addr, + calldata + )) + .unwrap(); + + let mut writer: Vec = Vec::new(); + let returns = &mut serde_json::Serializer::new(&mut writer); + + let native_executor = NativeExecutor::new(native_program); + + native_executor + .execute(fn_id, params, returns, required_init_gas) + .unwrap(); + + let result: String = String::from_utf8(writer).unwrap(); + let value = serde_json::from_str::(&result).unwrap(); + + return Ok(CallInfo { + caller_address: self.caller_address.clone(), + call_type: Some(self.call_type.clone()), + contract_address: self.contract_address.clone(), + code_address: self.code_address.clone(), + class_hash: Some( + self.get_code_class_hash(syscall_handler.starknet_storage_state.state)?, + ), + entry_point_selector: Some(self.entry_point_selector.clone()), + entry_point_type: Some(self.entry_point_type), + calldata: self.calldata.clone(), + retdata: value.return_values, + execution_resources: None, + events: syscall_handler.events, + storage_read_values: syscall_handler.starknet_storage_state.read_values, + accessed_storage_keys: syscall_handler.starknet_storage_state.accessed_keys, + failure_flag: value.failure_flag, + l2_to_l1_messages: syscall_handler.l2_to_l1_messages, + internal_calls: syscall_handler.internal_calls, + + // TODO + gas_consumed: 0, + }); + } } diff --git a/src/execution/mod.rs b/src/execution/mod.rs index 4acaf3fbe..ec22809df 100644 --- a/src/execution/mod.rs +++ b/src/execution/mod.rs @@ -43,7 +43,7 @@ pub struct CallInfo { pub entry_point_type: Option, pub calldata: Vec, pub retdata: Vec, - pub execution_resources: ExecutionResources, + pub execution_resources: Option, pub events: Vec, pub l2_to_l1_messages: Vec, pub storage_read_values: Vec, @@ -73,11 +73,11 @@ impl CallInfo { entry_point_type, calldata: Vec::new(), retdata: Vec::new(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 0, builtin_instance_counter: HashMap::new(), n_memory_holes: 0, - }, + }), events: Vec::new(), l2_to_l1_messages: Vec::new(), storage_read_values: Vec::new(), @@ -222,11 +222,11 @@ impl Default for CallInfo { l2_to_l1_messages: Vec::new(), accessed_storage_keys: HashSet::new(), calldata: Vec::new(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 0, n_memory_holes: 0, builtin_instance_counter: HashMap::new(), - }, + }), events: Vec::new(), gas_consumed: 0, failure_flag: false, @@ -275,7 +275,7 @@ impl<'de> Deserialize<'de> for CallInfo { } Ok(CallInfo { - execution_resources, + execution_resources: Some(execution_resources), retdata, calldata, internal_calls, @@ -354,6 +354,7 @@ pub struct TransactionExecutionContext { pub(crate) nonce: Felt252, pub(crate) n_sent_messages: usize, pub(crate) _n_steps: u64, + // pub(crate) use_cairo_native: bool, } impl TransactionExecutionContext { diff --git a/src/lib.rs b/src/lib.rs index 951dc2377..d4cb0c10b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +#![feature(strict_provenance)] #![deny(warnings)] #![forbid(unsafe_code)] #![cfg_attr(coverage_nightly, feature(no_coverage))] @@ -438,9 +439,10 @@ mod test { let block_context = BlockContext::default(); let Transaction::InvokeFunction(simul_invoke) = - invoke.create_for_simulation(true, false, false, false, false) else { - unreachable!() - }; + invoke.create_for_simulation(true, false, false, false, false) + else { + unreachable!() + }; let call_info = simul_invoke .run_validate_entrypoint( diff --git a/src/services/api/contract_classes/compiled_class.rs b/src/services/api/contract_classes/compiled_class.rs index 035a96fbb..7306d5756 100644 --- a/src/services/api/contract_classes/compiled_class.rs +++ b/src/services/api/contract_classes/compiled_class.rs @@ -24,6 +24,7 @@ use starknet::core::types::ContractClass::{Legacy, Sierra}; pub enum CompiledClass { Deprecated(Arc), Casm(Arc), + Sierra(Arc), } impl TryInto for CompiledClass { diff --git a/src/state/cached_state.rs b/src/state/cached_state.rs index 2a63a88cf..9bb7fac33 100644 --- a/src/state/cached_state.rs +++ b/src/state/cached_state.rs @@ -11,6 +11,7 @@ use crate::{ Address, ClassHash, }, }; +use cairo_lang_utils::bigint::BigUintAsHex; use cairo_vm::felt::Felt252; use getset::{Getters, MutGetters}; use num_traits::Zero; @@ -20,6 +21,8 @@ use std::{ sync::Arc, }; +pub type SierraProgramCache = + HashMap; pub type ContractClassCache = HashMap; pub const UNINITIALIZED_CLASS_HASH: &ClassHash = &[0u8; 32]; @@ -48,11 +51,11 @@ impl CachedState { pub fn new_for_testing( state_reader: Arc, cache: StateCache, - contract_classes: ContractClassCache, + _contract_classes: ContractClassCache, ) -> Self { Self { cache, - contract_classes, + contract_classes: HashMap::new(), state_reader, } } @@ -390,6 +393,15 @@ impl State for CachedState { } } + // if let Some(sierra_compiled_class) = self + // .sierra_programs + // .as_ref() + // .and_then(|x| x.get(class_hash)) + // { + // return Ok(CompiledClass::Sierra(Arc::new( + // sierra_compiled_class.clone(), + // ))); + // } // II: FETCHING FROM STATE_READER let contract = self.state_reader.get_contract_class(class_hash)?; match contract { @@ -404,9 +416,35 @@ impl State for CachedState { CompiledClass::Deprecated(ref contract) => { self.set_contract_class(class_hash, &CompiledClass::Deprecated(contract.clone()))? } + CompiledClass::Sierra(ref sierra_compiled_class) => self.set_contract_class( + class_hash, + &CompiledClass::Sierra(sierra_compiled_class.clone()), + )?, } Ok(contract) } + + fn set_sierra_program( + &mut self, + compiled_class_hash: &Felt252, + _sierra_program: Vec, + ) -> Result<(), StateError> { + let _compiled_class_hash = compiled_class_hash.to_be_bytes(); + + // TODO implement + // self.sierra_programs + // .as_mut() + // .ok_or(StateError::MissingSierraProgramsCache)? + // .insert(compiled_class_hash, sierra_program); + Ok(()) + } + + fn get_sierra_program( + &mut self, + _class_hash: &ClassHash, + ) -> Result, StateError> { + todo!() + } } #[cfg(test)] diff --git a/src/state/state_api.rs b/src/state/state_api.rs index 663ba5825..21a130b58 100644 --- a/src/state/state_api.rs +++ b/src/state/state_api.rs @@ -5,6 +5,7 @@ use crate::{ state::StateDiff, utils::{Address, ClassHash, CompiledClassHash}, }; +use cairo_lang_utils::bigint::BigUintAsHex; use cairo_vm::felt::Felt252; use starknet::core::types::FromByteArrayError; @@ -53,6 +54,13 @@ pub trait State { class_hash: &Felt252, compiled_class_hash: &Felt252, ) -> Result<(), StateError>; + + fn set_sierra_program( + &mut self, + compiled_class_hash: &Felt252, + sierra_program: Vec, + ) -> Result<(), StateError>; + fn apply_state_update(&mut self, sate_updates: &StateDiff) -> Result<(), StateError>; /// Counts the amount of modified contracts and the updates to the storage @@ -73,4 +81,9 @@ pub trait State { fn get_compiled_class_hash(&mut self, class_hash: &ClassHash) -> Result; fn get_contract_class(&mut self, class_hash: &ClassHash) -> Result; + + fn get_sierra_program( + &mut self, + class_hash: &ClassHash, + ) -> Result, StateError>; } diff --git a/src/syscalls/business_logic_syscall_handler.rs b/src/syscalls/business_logic_syscall_handler.rs index 095d2ad21..9510d798e 100644 --- a/src/syscalls/business_logic_syscall_handler.rs +++ b/src/syscalls/business_logic_syscall_handler.rs @@ -310,6 +310,7 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { .ok_or(ContractClassError::NoneEntryPointType)? .is_empty()), CompiledClass::Casm(class) => Ok(class.entry_points_by_type.constructor.is_empty()), + CompiledClass::Sierra(_) => todo!(), } } @@ -874,7 +875,7 @@ impl<'a, S: StateReader> BusinessLogicSyscallHandler<'a, S> { fn send_message_to_l1( &mut self, - vm: &mut VirtualMachine, + vm: &VirtualMachine, request: SendMessageToL1Request, remaining_gas: u128, ) -> Result { diff --git a/src/syscalls/deprecated_business_logic_syscall_handler.rs b/src/syscalls/deprecated_business_logic_syscall_handler.rs index 5f81f1f45..0c14afdaf 100644 --- a/src/syscalls/deprecated_business_logic_syscall_handler.rs +++ b/src/syscalls/deprecated_business_logic_syscall_handler.rs @@ -192,6 +192,7 @@ impl<'a, S: StateReader> DeprecatedBLSyscallHandler<'a, S> { .ok_or(ContractClassError::NoneEntryPointType)? .is_empty()), CompiledClass::Casm(class) => Ok(class.entry_points_by_type.constructor.is_empty()), + CompiledClass::Sierra(_) => todo!(), } } @@ -588,7 +589,7 @@ impl<'a, S: StateReader> DeprecatedBLSyscallHandler<'a, S> { pub(crate) fn storage_write( &mut self, - vm: &mut VirtualMachine, + vm: &VirtualMachine, syscall_ptr: Relocatable, ) -> Result<(), SyscallHandlerError> { let request = @@ -879,7 +880,7 @@ impl<'a, S: StateReader> DeprecatedBLSyscallHandler<'a, S> { pub(crate) fn replace_class( &mut self, - vm: &mut VirtualMachine, + vm: &VirtualMachine, syscall_ptr: Relocatable, ) -> Result<(), SyscallHandlerError> { let request = match self.read_and_validate_syscall_request("replace_class", vm, syscall_ptr) diff --git a/src/syscalls/deprecated_syscall_handler.rs b/src/syscalls/deprecated_syscall_handler.rs index 7ee047b76..2c3eb3ecb 100644 --- a/src/syscalls/deprecated_syscall_handler.rs +++ b/src/syscalls/deprecated_syscall_handler.rs @@ -1021,13 +1021,6 @@ mod tests { DeprecatedBLSyscallHandler::default_with(&mut state), RunResources::default(), ); - // Initialize state.set_contract_classes - syscall_handler_hint_processor - .syscall_handler - .starknet_storage_state - .state - .set_contract_classes(HashMap::new()) - .unwrap(); // Set contract class let contract_class = ContractClass::from_path("starknet_programs/fibonacci.json").unwrap(); @@ -1122,13 +1115,6 @@ mod tests { DeprecatedBLSyscallHandler::default_with(&mut state), RunResources::default(), ); - // Initialize state.set_contract_classes - syscall_handler_hint_processor - .syscall_handler - .starknet_storage_state - .state - .set_contract_classes(HashMap::new()) - .unwrap(); // Set contract class let contract_class = diff --git a/src/syscalls/mod.rs b/src/syscalls/mod.rs index 065e31652..48a332316 100644 --- a/src/syscalls/mod.rs +++ b/src/syscalls/mod.rs @@ -4,6 +4,8 @@ pub mod deprecated_syscall_handler; pub mod deprecated_syscall_request; pub mod deprecated_syscall_response; pub mod hint_code; +#[cfg(feature = "cairo-native")] +pub mod native_syscall_handler; pub mod other_syscalls; pub mod syscall_handler; pub mod syscall_handler_errors; diff --git a/src/syscalls/native_syscall_handler.rs b/src/syscalls/native_syscall_handler.rs new file mode 100644 index 000000000..681fb54ac --- /dev/null +++ b/src/syscalls/native_syscall_handler.rs @@ -0,0 +1,356 @@ +use cairo_native::starknet::{ + BlockInfo, ExecutionInfo, StarkNetSyscallHandler, SyscallResult, TxInfo, U256, +}; +use cairo_vm::felt::Felt252; +use num_traits::Zero; + +use crate::{ + core::errors::state_errors::StateError, + definitions::block_context::BlockContext, + execution::{ + execution_entry_point::{ExecutionEntryPoint, ExecutionResult}, + CallInfo, CallType, OrderedEvent, OrderedL2ToL1Message, TransactionExecutionContext, + }, + state::{ + contract_storage_state::ContractStorageState, state_api::StateReader, + ExecutionResourcesManager, + }, + utils::Address, + EntryPointType, +}; + +#[derive(Debug)] +pub struct NativeSyscallHandler<'a, S> +where + S: StateReader, +{ + pub(crate) starknet_storage_state: ContractStorageState<'a, S>, + pub(crate) contract_address: Address, + pub(crate) caller_address: Address, + pub(crate) entry_point_selector: Felt252, + pub(crate) events: Vec, + pub(crate) n_emitted_events: u64, + pub(crate) n_sent_messages: usize, + pub(crate) l2_to_l1_messages: Vec, + pub(crate) tx_execution_context: TransactionExecutionContext, + pub(crate) block_context: BlockContext, + // TODO: This may not be really needed for Cairo Native, just passing + // it to be able to call the `execute` method of ExecutionEntrypoint. + pub(crate) internal_calls: Vec, +} + +impl<'a, S: StateReader> StarkNetSyscallHandler for NativeSyscallHandler<'a, S> { + fn get_block_hash(&self, block_number: u64) -> SyscallResult { + // Todo: define error message when block is not found + // should return same message than vm + println!("Called `get_block_hash({block_number})` from MLIR."); + let block = dbg!(&self.block_context.blocks).get(&block_number); + match block { + Some(block) => { + let block_hash = block.header.block_hash.to_owned(); + Ok(Felt252::from_bytes_be(block_hash.0.bytes())) + }, + None => { + todo!("Not implemented") + } + } + } + + fn get_execution_info(&self) -> SyscallResult { + println!("Called `get_execution_info()` from MLIR."); + Ok(ExecutionInfo { + block_info: BlockInfo { + block_number: self.block_context.block_info.block_number, + block_timestamp: self.block_context.block_info.block_timestamp, + sequencer_address: self.block_context.block_info.sequencer_address.0.clone(), + }, + tx_info: TxInfo { + version: self.tx_execution_context.version.clone(), + account_contract_address: self + .tx_execution_context + .account_contract_address + .0 + .clone(), + max_fee: self.tx_execution_context.max_fee, + signature: self.tx_execution_context.signature.clone(), + transaction_hash: self.tx_execution_context.transaction_hash.clone(), + chain_id: self.block_context.starknet_os_config.chain_id.clone(), + nonce: self.tx_execution_context.nonce.clone(), + }, + caller_address: self.caller_address.0.clone(), + contract_address: self.contract_address.0.clone(), + entry_point_selector: self.entry_point_selector.clone(), + }) + } + + fn deploy( + &self, + class_hash: cairo_vm::felt::Felt252, + contract_address_salt: cairo_vm::felt::Felt252, + calldata: &[cairo_vm::felt::Felt252], + deploy_from_zero: bool, + ) -> SyscallResult<(cairo_vm::felt::Felt252, Vec)> { + println!("Called `deploy({class_hash}, {contract_address_salt}, {calldata:?}, {deploy_from_zero})` from MLIR."); + Ok(( + class_hash + contract_address_salt, + calldata.iter().map(|x| x + &Felt252::new(1)).collect(), + )) + } + + fn replace_class(&self, class_hash: cairo_vm::felt::Felt252) -> SyscallResult<()> { + println!("Called `replace_class({class_hash})` from MLIR."); + Ok(()) + } + + fn library_call( + &self, + class_hash: cairo_vm::felt::Felt252, + function_selector: cairo_vm::felt::Felt252, + calldata: &[cairo_vm::felt::Felt252], + ) -> SyscallResult> { + println!( + "Called `library_call({class_hash}, {function_selector}, {calldata:?})` from MLIR." + ); + Ok(calldata.iter().map(|x| x * &Felt252::new(3)).collect()) + } + + fn call_contract( + &mut self, + address: cairo_vm::felt::Felt252, + entrypoint_selector: cairo_vm::felt::Felt252, + calldata: &[cairo_vm::felt::Felt252], + ) -> SyscallResult> { + println!( + "Called `call_contract({address}, {entrypoint_selector}, {calldata:?})` from MLIR." + ); + let address = Address(address); + let exec_entry_point = ExecutionEntryPoint::new( + address, + calldata.to_vec(), + entrypoint_selector, + self.caller_address.clone(), + EntryPointType::External, + Some(CallType::Call), + None, + // TODO: The remaining gas must be correctly set someway + u128::MAX, + ); + + let ExecutionResult { call_info, .. } = exec_entry_point + .execute( + self.starknet_storage_state.state, + // TODO: This fields dont make much sense in the Cairo Native context, + // they are only dummy values for the `execute` method. + &BlockContext::default(), + &mut ExecutionResourcesManager::default(), + &mut TransactionExecutionContext::default(), + false, + u64::MAX, + ) + .unwrap(); + + let call_info = call_info.unwrap(); + + // update syscall handler information + self.starknet_storage_state + .read_values + .extend(call_info.storage_read_values.clone()); + self.starknet_storage_state + .accessed_keys + .extend(call_info.accessed_storage_keys.clone()); + self.internal_calls.push(call_info.clone()); + + Ok(call_info.retdata) + } + + fn storage_read( + &mut self, + address_domain: u32, + address: cairo_vm::felt::Felt252, + ) -> SyscallResult { + println!("Called `storage_read({address_domain}, {address})` from MLIR."); + match self.starknet_storage_state.read(&address.to_be_bytes()) { + Ok(value) => Ok(value), + Err(_e @ StateError::Io(_)) => todo!(), + Err(_) => Ok(Felt252::zero()), + } + } + + fn storage_write( + &mut self, + address_domain: u32, + address: cairo_vm::felt::Felt252, + value: cairo_vm::felt::Felt252, + ) -> SyscallResult<()> { + println!("Called `storage_write({address_domain}, {address}, {value})` from MLIR."); + Ok(self + .starknet_storage_state + .write(&address.to_be_bytes(), value)) + } + + fn emit_event( + &mut self, + keys: &[cairo_vm::felt::Felt252], + data: &[cairo_vm::felt::Felt252], + ) -> SyscallResult<()> { + let order = self.n_emitted_events; + println!("Called `emit_event(KEYS: {keys:?}, DATA: {data:?})` from MLIR."); + self.events + .push(OrderedEvent::new(order, keys.to_vec(), data.to_vec())); + self.n_emitted_events += 1; + Ok(()) + } + + fn send_message_to_l1( + &mut self, + to_address: cairo_vm::felt::Felt252, + payload: &[cairo_vm::felt::Felt252], + ) -> SyscallResult<()> { + println!("Called `send_message_to_l1({to_address}, {payload:?})` from MLIR."); + let addr = Address(to_address); + self.l2_to_l1_messages.push(OrderedL2ToL1Message::new( + self.n_sent_messages, + addr, + payload.to_vec(), + )); + + // Update messages count. + self.n_sent_messages += 1; + Ok(()) + } + + fn keccak(&self, input: &[u64]) -> SyscallResult { + println!("Called `keccak({input:?})` from MLIR."); + Ok(U256(Felt252::from(1234567890).to_le_bytes())) + } + + fn secp256k1_add( + &self, + _p0: cairo_native::starknet::Secp256k1Point, + _p1: cairo_native::starknet::Secp256k1Point, + ) -> SyscallResult> { + todo!() + } + + fn secp256k1_get_point_from_x( + &self, + _x: cairo_native::starknet::U256, + _y_parity: bool, + ) -> SyscallResult> { + todo!() + } + + fn secp256k1_get_xy( + &self, + _p: cairo_native::starknet::Secp256k1Point, + ) -> SyscallResult<(cairo_native::starknet::U256, cairo_native::starknet::U256)> { + todo!() + } + + fn secp256k1_mul( + &self, + _p: cairo_native::starknet::Secp256k1Point, + _m: cairo_native::starknet::U256, + ) -> SyscallResult> { + todo!() + } + + fn secp256k1_new( + &self, + _x: cairo_native::starknet::U256, + _y: cairo_native::starknet::U256, + ) -> SyscallResult> { + todo!() + } + + fn secp256r1_add( + &self, + _p0: cairo_native::starknet::Secp256k1Point, + _p1: cairo_native::starknet::Secp256k1Point, + ) -> SyscallResult> { + todo!() + } + + fn secp256r1_get_point_from_x( + &self, + _x: cairo_native::starknet::U256, + _y_parity: bool, + ) -> SyscallResult> { + todo!() + } + + fn secp256r1_get_xy( + &self, + _p: cairo_native::starknet::Secp256k1Point, + ) -> SyscallResult<(cairo_native::starknet::U256, cairo_native::starknet::U256)> { + todo!() + } + + fn secp256r1_mul( + &self, + _p: cairo_native::starknet::Secp256k1Point, + _m: cairo_native::starknet::U256, + ) -> SyscallResult> { + todo!() + } + + fn secp256r1_new( + &self, + _x: cairo_native::starknet::U256, + _y: cairo_native::starknet::U256, + ) -> SyscallResult> { + todo!() + } + + fn pop_log(&self) { + todo!() + } + + fn set_account_contract_address(&self, _contract_address: cairo_vm::felt::Felt252) { + todo!() + } + + fn set_block_number(&self, _block_number: u64) { + todo!() + } + + fn set_block_timestamp(&self, _block_timestamp: u64) { + todo!() + } + + fn set_caller_address(&self, _address: cairo_vm::felt::Felt252) { + todo!() + } + + fn set_chain_id(&self, _chain_id: cairo_vm::felt::Felt252) { + todo!() + } + + fn set_contract_address(&self, _address: cairo_vm::felt::Felt252) { + todo!() + } + + fn set_max_fee(&self, _max_fee: u128) { + todo!() + } + + fn set_nonce(&self, _nonce: cairo_vm::felt::Felt252) { + todo!() + } + + fn set_sequencer_address(&self, _address: cairo_vm::felt::Felt252) { + todo!() + } + + fn set_signature(&self, _signature: &[cairo_vm::felt::Felt252]) { + todo!() + } + + fn set_transaction_hash(&self, _transaction_hash: cairo_vm::felt::Felt252) { + todo!() + } + + fn set_version(&self, _version: cairo_vm::felt::Felt252) { + todo!() + } +} diff --git a/src/syscalls/syscall_handler.rs b/src/syscalls/syscall_handler.rs index 67db9ebad..58290eada 100644 --- a/src/syscalls/syscall_handler.rs +++ b/src/syscalls/syscall_handler.rs @@ -142,7 +142,7 @@ impl<'a, S: StateReader> HintProcessorPostRun for SyscallHintProcessor<'a, S> { // TODO: These four functions were copied from cairo-rs in // hint_processor/cairo-1-hint-processor/hint_processor_utils.rs as these functions are private. // They will became public soon and then we have to remove this ones and use the ones in cairo-rs instead -fn as_relocatable(vm: &mut VirtualMachine, value: &ResOperand) -> Result { +fn as_relocatable(vm: &VirtualMachine, value: &ResOperand) -> Result { let (base, offset) = extract_buffer(value)?; get_ptr(vm, base, &offset).map_err(HintError::from) } diff --git a/src/testing/state.rs b/src/testing/state.rs index 58aba5d6f..4260fe499 100644 --- a/src/testing/state.rs +++ b/src/testing/state.rs @@ -213,7 +213,7 @@ impl StarknetState { pub fn execute_tx( &mut self, - tx: &mut Transaction, + tx: &Transaction, remaining_gas: u128, ) -> Result { let tx = tx.execute(&mut self.state, &self.block_context, remaining_gas)?; @@ -601,11 +601,11 @@ mod tests { entry_point_type: Some(EntryPointType::External), calldata: vec![1.into(), 1.into(), 10.into()], retdata: vec![144.into()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 94, n_memory_holes: 0, builtin_instance_counter: HashMap::default(), - }, + }), ..Default::default() }), actual_resources, diff --git a/src/transaction/declare.rs b/src/transaction/declare.rs index 034132e63..c68a76572 100644 --- a/src/transaction/declare.rs +++ b/src/transaction/declare.rs @@ -429,10 +429,10 @@ mod tests { entry_point_type: Some(EntryPointType::External), calldata, class_hash: Some(expected_class_hash), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 12, ..Default::default() - }, + }), ..Default::default() }); diff --git a/src/transaction/declare_v2.rs b/src/transaction/declare_v2.rs index a9431326f..c80cb68b5 100644 --- a/src/transaction/declare_v2.rs +++ b/src/transaction/declare_v2.rs @@ -381,6 +381,10 @@ impl DeclareV2 { &self.compiled_class_hash.to_be_bytes(), &CompiledClass::Casm(Arc::new(casm_class)), )?; + state.set_sierra_program( + &self.sierra_class_hash, + self.sierra_contract_class.sierra_program.clone(), + )?; Ok(()) } @@ -619,13 +623,13 @@ mod tests { let path; #[cfg(not(feature = "cairo_1_tests"))] { - version = &2.into() | &QUERY_VERSION_BASE.clone(); + version = &Into::::into(2) | &QUERY_VERSION_BASE.clone(); path = PathBuf::from("starknet_programs/cairo2/fibonacci.sierra"); } #[cfg(feature = "cairo_1_tests")] { - version = &1.into() | &QUERY_VERSION_BASE.clone(); + version = &Into::::into(1) | &QUERY_VERSION_BASE.clone(); path = PathBuf::from("starknet_programs/cairo1/fibonacci.sierra"); } diff --git a/src/transaction/deploy.rs b/src/transaction/deploy.rs index f0b9b320a..e25a4f370 100644 --- a/src/transaction/deploy.rs +++ b/src/transaction/deploy.rs @@ -140,6 +140,7 @@ impl Deploy { .ok_or(ContractClassError::NoneEntryPointType)? .is_empty()), CompiledClass::Casm(class) => Ok(class.entry_points_by_type.constructor.is_empty()), + CompiledClass::Sierra(_) => todo!(), } } /// Deploys the contract in the starknet network and calls its constructor if it has one. @@ -151,7 +152,13 @@ impl Deploy { state: &mut CachedState, block_context: &BlockContext, ) -> Result { - state.set_contract_class(&self.contract_hash, &self.contract_class)?; + match self.contract_class.clone() { + CompiledClass::Sierra(_) => todo!(), + _ => { + state.set_contract_class(&self.contract_hash, &self.contract_class)?; + } + } + state.deploy_contract(self.contract_address.clone(), self.contract_hash)?; if self.constructor_entry_points_empty(self.contract_class.clone())? { diff --git a/src/transaction/deploy_account.rs b/src/transaction/deploy_account.rs index bc8fe3ef8..9189b04df 100644 --- a/src/transaction/deploy_account.rs +++ b/src/transaction/deploy_account.rs @@ -185,6 +185,7 @@ impl DeployAccount { .ok_or(ContractClassError::NoneEntryPointType)? .is_empty()), CompiledClass::Casm(class) => Ok(class.entry_points_by_type.constructor.is_empty()), + CompiledClass::Sierra(_) => todo!(), } } diff --git a/src/transaction/invoke_function.rs b/src/transaction/invoke_function.rs index f05e3e942..5cdbed2a0 100644 --- a/src/transaction/invoke_function.rs +++ b/src/transaction/invoke_function.rs @@ -1235,7 +1235,7 @@ mod tests { ) .unwrap(), None, - &1.into() | &QUERY_VERSION_BASE.clone(), + &Into::::into(1) | &QUERY_VERSION_BASE.clone(), ); assert!(expected_error.is_err()); } diff --git a/src/transaction/l1_handler.rs b/src/transaction/l1_handler.rs index d08d8ccf5..b783b73e3 100644 --- a/src/transaction/l1_handler.rs +++ b/src/transaction/l1_handler.rs @@ -313,14 +313,14 @@ mod test { 10.into(), ], retdata: vec![], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 141, n_memory_holes: 20, builtin_instance_counter: HashMap::from([ ("range_check_builtin".to_string(), 6), ("pedersen_builtin".to_string(), 2), ]), - }, + }), events: vec![], l2_to_l1_messages: vec![], storage_read_values: vec![0.into(), 0.into()], diff --git a/src/transaction/verify_version.rs b/src/transaction/verify_version.rs index 8787b09b9..2f9abecdb 100644 --- a/src/transaction/verify_version.rs +++ b/src/transaction/verify_version.rs @@ -31,6 +31,8 @@ pub fn verify_version( #[cfg(test)] mod test { + use cairo_vm::felt::Felt252; + // TODO: fixture tests would be better here use crate::{definitions::constants::QUERY_VERSION_BASE, transaction::error::TransactionError}; @@ -109,7 +111,7 @@ mod test { #[test] fn version_0_with_max_fee_0_nonce_0_and_empty_signature_and_query_version_set_should_return_ok() { - let version = &0.into() | &QUERY_VERSION_BASE.clone(); + let version = &Into::::into(0) | &QUERY_VERSION_BASE.clone(); let max_fee = 0; let nonce = 0.into(); let signature = vec![]; @@ -119,7 +121,7 @@ mod test { #[test] fn version_1_with_query_version_set_should_return_ok() { - let version = &1.into() | &QUERY_VERSION_BASE.clone(); + let version = &Into::::into(1) | &QUERY_VERSION_BASE.clone(); let max_fee = 2; let nonce = 3.into(); let signature = vec![5.into()]; @@ -129,7 +131,7 @@ mod test { #[test] fn version_2_with_query_version_set_should_return_ok() { - let version = &2.into() | &QUERY_VERSION_BASE.clone(); + let version = &Into::::into(2) | &QUERY_VERSION_BASE.clone(); let max_fee = 43; let nonce = 4.into(); let signature = vec![6.into()]; diff --git a/src/utils.rs b/src/utils.rs index affc6a726..49055aa62 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -284,7 +284,7 @@ pub fn get_storage_var_address( let args = args .iter() - .map(|felt| felt_to_field_element(felt)) + .map(felt_to_field_element) .collect::, _>>()?; let storage_var_name_hash = diff --git a/starknet_programs/cairo2/callee.cairo b/starknet_programs/cairo2/callee.cairo new file mode 100644 index 000000000..3a71ab549 --- /dev/null +++ b/starknet_programs/cairo2/callee.cairo @@ -0,0 +1,22 @@ +#[starknet::contract] +mod Callee { + #[storage] + struct Storage { + balance: felt252, + } + + #[constructor] + fn constructor(ref self: ContractState, initial_balance: felt252) { + self.balance.write(initial_balance); + } + + #[external(v0)] + fn return_42(ref self: ContractState) -> felt252 { + 42 + } + + #[external(v0)] + fn return_44(ref self: ContractState) -> felt252 { + 44 + } +} \ No newline at end of file diff --git a/starknet_programs/cairo2/caller.cairo b/starknet_programs/cairo2/caller.cairo new file mode 100644 index 000000000..179478d46 --- /dev/null +++ b/starknet_programs/cairo2/caller.cairo @@ -0,0 +1,19 @@ +#[starknet::contract] +mod Caller { + use starknet::call_contract_syscall; + use core::array; + use core::result::ResultTrait; + + #[storage] + struct Storage { + balance: felt252, + } + + #[external(v0)] + fn call_callee_contract(ref self: ContractState, function_selector: felt252) -> felt252 { + let calldata: Array = ArrayTrait::new(); + let callee_addr = starknet::get_contract_address(); + let return_data = call_contract_syscall(callee_addr, function_selector, calldata.span()).unwrap(); + *return_data.get(0_usize).unwrap().unbox() + } +} diff --git a/starknet_programs/cairo2/echo.cairo b/starknet_programs/cairo2/echo.cairo new file mode 100644 index 000000000..1cf32b282 --- /dev/null +++ b/starknet_programs/cairo2/echo.cairo @@ -0,0 +1,17 @@ +#[starknet::contract] +mod Echo { + #[storage] + struct Storage { + balance: felt252, + } + + #[constructor] + fn constructor(ref self: ContractState, initial_balance: felt252) { + self.balance.write(initial_balance); + } + + #[external(v0)] + fn echo(ref self: ContractState, value: felt252) -> felt252 { + value + } +} \ No newline at end of file diff --git a/starknet_programs/cairo2/echo_caller.cairo b/starknet_programs/cairo2/echo_caller.cairo new file mode 100644 index 000000000..80e29eb18 --- /dev/null +++ b/starknet_programs/cairo2/echo_caller.cairo @@ -0,0 +1,20 @@ +#[starknet::contract] +mod EchoCaller { + use starknet::call_contract_syscall; + use core::array; + use core::result::ResultTrait; + + #[storage] + struct Storage { + balance: felt252, + } + + #[external(v0)] + fn call_echo_contract(ref self: ContractState, function_selector: felt252, value: felt252) -> felt252 { + let mut calldata: Array = ArrayTrait::new(); + calldata.append(value); + let callee_addr = starknet::get_contract_address(); + let return_data = call_contract_syscall(callee_addr, function_selector, calldata.span()).unwrap(); + *return_data.get(0_usize).unwrap().unbox() + } +} diff --git a/starknet_programs/cairo2/erc20.cairo b/starknet_programs/cairo2/erc20.cairo index c17e9b2f3..464cf5d7d 100644 --- a/starknet_programs/cairo2/erc20.cairo +++ b/starknet_programs/cairo2/erc20.cairo @@ -67,7 +67,7 @@ mod erc_20 { self.name.write(name); self.symbol.write(symbol); self.decimals.write(decimals); - assert(!recipient.is_zero(), 'ERC20: mint to the 0 address'); + // assert(!recipient.is_zero(), 'ERC20: mint to the 0 address'); self.total_supply.write(initial_supply); self.balances.write(recipient, initial_supply); self diff --git a/starknet_programs/cairo2/event_emitter.cairo b/starknet_programs/cairo2/event_emitter.cairo new file mode 100644 index 000000000..fd5bb8129 --- /dev/null +++ b/starknet_programs/cairo2/event_emitter.cairo @@ -0,0 +1,30 @@ +#[starknet::contract] +mod EventTest { + use starknet::syscalls::emit_event_syscall; + + #[storage] + struct Storage { + balance: felt252, + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + EmitEvent: EmitEvent + } + + #[derive(Drop, starknet::Event)] + struct EmitEvent { + n: u128, + } + + #[external(v0)] + fn trigger_event(ref self: ContractState) -> felt252 { + let mut keys = ArrayTrait::new(); + keys.append('n'); + let mut values = ArrayTrait::new(); + values.append(1); + emit_event_syscall(keys.span(), values.span()).unwrap(); + 1234 + } +} diff --git a/starknet_programs/cairo2/hello_world_account.cairo b/starknet_programs/cairo2/hello_world_account.cairo index c87651795..c98ded486 100644 --- a/starknet_programs/cairo2/hello_world_account.cairo +++ b/starknet_programs/cairo2/hello_world_account.cairo @@ -108,7 +108,7 @@ mod Account { // Call the target contract starknet::call_contract_syscall( address: to, entry_point_selector: selector, calldata: calldata.span() - ).unwrap_syscall() + ).unwrap() } } } diff --git a/starknet_programs/raw_contract_classes/0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3.sierra b/starknet_programs/raw_contract_classes/0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3.sierra new file mode 100644 index 000000000..0925ceabe --- /dev/null +++ b/starknet_programs/raw_contract_classes/0x113bf26d112a164297e04381212c9bd7409f07591f0a04f539bdf56693eaaf3.sierra @@ -0,0 +1,687 @@ +{ + "sierra_program": [ + "0x1", + "0x2", + "0x0", + "0x2", + "0x0", + "0x0", + "0x13e", + "0xc2", + "0x2a", + "0x52616e6765436865636b", + "0x0", + "0x4761734275696c74696e", + "0x66656c74323532", + "0x4172726179", + "0x1", + "0x2", + "0x536e617073686f74", + "0x3", + "0x537472756374", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x4", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x456e756d", + "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972", + "0x6", + "0x2d7b9ba5597ffc180f5bbd030da76b84ecf1e4f1311043a0a15295f29ccc1b0", + "0x7", + "0x753332", + "0x4275696c74696e436f737473", + "0xa5a3299e5660d06bfa52eacd3a1fcd165ecd6f0cbac6f443fe26f6f68c70f3", + "0x38c95698b12086e50047d206c91c7248ef6f3427861aea1234b080c80fddf35", + "0xb", + "0x53797374656d", + "0xc", + "0x14de46c93830b854d231d540339ee8ae16bb18830a375fe81572a472d5945f1", + "0xf", + "0x3b5488061ac7a66f24fcbc888e7d6d5454df009b3abc2572f25f2400cfac629", + "0xe", + "0x10", + "0x5", + "0x19b3b4955bdcfa379bfc5a4949111c4efdd79128f8676f4d0895419b22e2ad7", + "0x12", + "0x426f78", + "0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7", + "0x14", + "0x4e6f6e5a65726f", + "0x464c55b21b6d3dadb22fd8587d389a14c0e53182f19e003bdf15db3ecb1676", + "0x75313238", + "0x16c8ea90dd6c64f624ab9863dc00b8f2c35a45fb64a97fa4bac6359fba975ec", + "0x18", + "0x3610c7cf372ee49406b6d03ec0b82f790884fb8652a25c91b2a749ad8982bc5", + "0x19", + "0x17", + "0xcfb175da425fe9834ebf5c4c2342c0507188ad820763d15abada732ab9341a", + "0x1b", + "0x20df6a887dc282129d37d7fa362eda55eb38e5c74604aff8fd97f11e3e79a2f", + "0x1d", + "0x101dc0399934cc08fa0d6f6f2daead4e4a38cabeea1c743e1fc28d2d6e58e99", + "0xd3a26a7712a33547a4a74e7594a446ca400cb36a0c2c307b92eff9ce82ff8", + "0x20", + "0x53746f726167654261736541646472657373", + "0x2cf4ead4392e987c9b56754a10f0a8e0f13776791e096fa6503893f05582c51", + "0x23", + "0x1586938debaf5e59bfb4e9f27763dc7b3da65f9737172ffde9ff9b65b55d857", + "0x24", + "0x1ca27f4a416836d321a19551a437aeb9946fde25373762126dda39b53c0bd11", + "0x53746f7261676541646472657373", + "0x1909a2057b9c1373b889e003e050a09f431d8108e0659d03444ced99a6eea68", + "0xb1", + "0x7265766f6b655f61705f747261636b696e67", + "0x656e61626c655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x73746f72655f74656d70", + "0x66756e6374696f6e5f63616c6c", + "0x656e756d5f6d61746368", + "0x8", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f6c656e", + "0x736e617073686f745f74616b65", + "0x9", + "0x64726f70", + "0x7533325f636f6e7374", + "0x72656e616d65", + "0x7533325f6571", + "0x7374727563745f636f6e737472756374", + "0x656e756d5f696e6974", + "0x6a756d70", + "0x626f6f6c5f6e6f745f696d706c", + "0x6765745f6275696c74696e5f636f737473", + "0xa", + "0x77697468647261775f6761735f616c6c", + "0x64697361626c655f61705f747261636b696e67", + "0xd", + "0x11", + "0x61727261795f6e6577", + "0x13", + "0x66656c743235325f636f6e7374", + "0x4f7574206f6620676173", + "0x61727261795f617070656e64", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x15", + "0x756e626f78", + "0x66656c743235325f737562", + "0x66656c743235325f69735f7a65726f", + "0x16", + "0x1a", + "0x1c", + "0x753132385f636f6e7374", + "0x1e", + "0x656d69745f6576656e745f73797363616c6c", + "0x1f", + "0x21", + "0x73746f726167655f626173655f616464726573735f636f6e7374", + "0x1afeeaff0ed5cee7d05a21078399c2f56226b0cd5657062500cef4c4e736f85", + "0x22", + "0x25", + "0x753132385f6f766572666c6f77696e675f616464", + "0x26", + "0x753132385f616464204f766572666c6f77", + "0x753132385f746f5f66656c74323532", + "0x73746f726167655f616464726573735f66726f6d5f62617365", + "0x27", + "0x73746f726167655f77726974655f73797363616c6c", + "0x477e157efde59c5531277ede78acb3e03ef69508c6c35fde3495aa0671d227", + "0x1d3bd105efd11cb4e1d188c3f2b302935b4db511160389bd8b0a936ce967708", + "0x73746f726167655f726561645f73797363616c6c", + "0x28", + "0x53746f7261676541636365737355313238202d206e6f6e2075313238", + "0x75313238735f66726f6d5f66656c74323532", + "0x29", + "0x304", + "0xffffffffffffffff", + "0x76", + "0x66", + "0x53", + "0x44", + "0x2b", + "0x2c", + "0x2d", + "0x2e", + "0x3d", + "0x2f", + "0x30", + "0x31", + "0x32", + "0x33", + "0x34", + "0x35", + "0x36", + "0x37", + "0x38", + "0x39", + "0x3a", + "0x3b", + "0x3c", + "0x3e", + "0x3f", + "0x40", + "0x41", + "0x42", + "0x43", + "0x45", + "0x46", + "0x47", + "0x48", + "0x4b", + "0x49", + "0x4a", + "0x4c", + "0x4d", + "0x4e", + "0x4f", + "0x50", + "0x51", + "0x52", + "0x54", + "0x55", + "0x56", + "0x57", + "0x58", + "0x59", + "0x5a", + "0x5b", + "0x5c", + "0x5d", + "0x5e", + "0x5f", + "0x60", + "0x61", + "0x62", + "0x63", + "0x64", + "0x65", + "0x67", + "0x68", + "0x69", + "0xe3", + "0x9a", + "0x9e", + "0xd1", + "0xc4", + "0xbd", + "0xf9", + "0xfe", + "0x124", + "0x11a", + "0x11f", + "0x145", + "0x13e", + "0x17d", + "0x1a3", + "0x19c", + "0x194", + "0x18c", + "0x185", + "0x6a", + "0x6b", + "0x6c", + "0x6d", + "0x6e", + "0x6f", + "0x70", + "0x71", + "0x72", + "0x73", + "0x74", + "0x75", + "0x77", + "0x78", + "0x79", + "0x7a", + "0x7b", + "0x1c2", + "0x1e3", + "0x1e8", + "0x1f3", + "0x219", + "0x212", + "0x226", + "0x7c", + "0x7d", + "0x22a", + "0x7e", + "0x7f", + "0x80", + "0x81", + "0x236", + "0x82", + "0x83", + "0x84", + "0x85", + "0x24b", + "0x250", + "0x25b", + "0x86", + "0x87", + "0x88", + "0x89", + "0x8a", + "0x271", + "0x8b", + "0x8c", + "0x8d", + "0x27c", + "0x8e", + "0x8f", + "0x90", + "0x91", + "0x92", + "0x287", + "0x93", + "0x94", + "0x95", + "0x96", + "0x97", + "0x2ad", + "0x98", + "0x99", + "0x29f", + "0x9b", + "0x9c", + "0x9d", + "0x9f", + "0xa0", + "0xa1", + "0x2bc", + "0xa2", + "0x2c9", + "0xa3", + "0xa4", + "0xa5", + "0xa6", + "0xa7", + "0x2e8", + "0xa8", + "0xa9", + "0x2ef", + "0xaa", + "0xab", + "0xac", + "0xad", + "0xae", + "0xaf", + "0xb0", + "0xf2", + "0x12b", + "0x1ab", + "0x1af", + "0x1c8", + "0x1fa", + "0x220", + "0x23b", + "0x262", + "0x264", + "0x281", + "0x28d", + "0x2b6", + "0x2c2", + "0x2d2", + "0x2dc", + "0x2e2", + "0x2f2", + "0x2fe", + "0x1c1c", + "0x241c0d01018140c0302c0407050240c060401c0c06028080802018080200", + "0x182c02038282a020302804140104c2006090182202048382006080181e02", + "0x700409070240c1b030340409050680406050400c19030340409050083017", + "0x184602048380e06030883c06108184002048383e06068080e0a0f0183a06", + "0xb00c2b030a80409070a40c280101c14021389804060501c0c06128400c24", + "0x185e020483820060b8181a02048283c06170185a02048385206068080e0a", + "0x8681e030cc0c32010241c10030340407050240c10030c40409070780c30", + "0x187202048383c061c0186e02048386c06068080e0a0481852061a808120e", + "0xfc043e010f47829030a40c0d010241410030a40c3b010241c021d0a40c29", + "0x1c0c062307c0c06229100c06218080c062081c12062107c0c06208088002", + "0x138200603134044c240180c41240180c4b0101c0c4a240180c49240180c47", + "0x400c06248480c0621808a006038480c07270089e12030188202038480c07", + "0x104aa06031040c06031043206031342e060313404540114ca406031040451", + "0x240c06248240c062381c0c062b8740c06249580c06218241206210640c06", + "0x180c490301cb00603938b0060310404072c0180e4e108180c4d0f8180c4d", + "0x18b20c04818841e030189a1b030189a0703018b60703018825a03818b212", + "0x180c410101cbe06039380e06031783e0903108ba07031643e0603124b807", + "0x1c0c062381c0c062581c0c063017c0c06218180e5f0301c9c5f03018820c", + "0x1388806031040407220180e4e318180c490118804610101c0c59038180c49", + "0x740c06228401206211900c06208180e640301c9c2c030189a06039100c07", + "0x10c2409031082e06031042e060311c320603114ac06031040c072b0180e4e", + "0x18842903018820603818cc02039900c07270ac0c06268b80c06229940c06", + "0x180c490101cac06039383a0603134600603114ce060310c9009031088809", + "0x188409030188264030189264030188e5204818840203818cc10030188217", + "0x240c42348180c4b0301cd20603938d206031040407348180e4e011a02e09", + "0x18865504818846d03018826c03818d619030189233030188a6a030188619", + "0x180c410101cca06039385c06031343a09031086c0603104700603114dc06", + "0x18b206039c00c07271c00c06208080e700301c9c02378180e650301c9c65", + "0x180e4e180180c4d011d4e806031040473011c8360903108e0060312ce207", + "0x18842b03018827603818b2640301886060399c0c072719c0c06208080e67", + "0x138660603134d2060310c12060312cac0903108580603104ee07031643c09", + "0x1c9c790301886210481884023c0180e6a0301c9c6a030188202039a80c07", + "0x1cdc0603938f40703164dc06031040407370180e4e1c0180c4d0101c6c06", + "0x1601206210ac0c06228a40c06249c00c06218d80c06218180e360301c9c06", + "0x180e4e3e0180c493e0180c4d3c8180c410101cf20603938047b160180c49", + "0x8047e0300804023e8901206210a40c06259e40c06258080c06258180e79", + "0x3004023f01804090104820073f87c18073f01c0c020381c04023f0180406", + "0x1200c12010300c7e030300c100112088073f018a4060f808a4063f0181206", + "0x1f80c55031200455031f80c440311004023f0180409010640c800b818fc07", + "0x1480456031f80c020c808047e0306c0c170107836073f0183a06290083a06", + "0x18b0062a80848063f0183c062a808047e030840c170116042073f018ac06", + "0x8fc0601024040215808fc072f8900e1b010900c7e030900c1d0117c0c7e", + "0x180458010a40c7e030b00c21010b00c7e0318c0c560118c0c7e030083c02", + "0x1900c21011900c7e030ac0c24010ac0c7e030083c02011f80c02048080430", + "0x18fc0717018c60217018fc0617018420217018fc0614818be0214818fc06", + "0x18560233818fc06010a404023f018ca0616008047e030081202180190265", + "0x8047e030081202369a80e82199a40e7e0399c3e0c049900467031f80c67", + "0x18fc063481820021c018fc061b01860021b018fc060119404023f018042e", + "0x840484031f80c38030cc0483031f80c07031a40400031f80c330319c047c", + "0x1f80e79031b404793a1c0dc0c3f0190a8441800f81f350090a063f0182e06", + "0x1b80489031f80c021c008047e032180c3601008fc060102404880321d0c06", + "0x1918063c80918063f01916063a008047e032280c700122d14073f0191206", + "0x2400c7e031c00c670123c0c7e031b80c10012380c7e032340c7c012340c7e", + "0x1f80c020480924914823c180649018fc0647018000248818fc063a018d202", + "0x1a40495031f80c700319c0494031f80c6e030400493031f80c880320c0402", + "0x8047e0300812024b21d2a94060192c063f0192606000090e063f018e806", + "0x930063f01804850125c0c7e030087002011f80c170321004023f018042e", + "0x2680e8a012680c7e0300912024c818fc064c25c0e88012600c7e032600c86", + "0x1f80c6d0319c049c031f80c6a030400482031f80c9b0320c049b031f80c99", + "0x812024fa793a9c060193e063f0190406000093c063f0180e06348093a06", + "0x1c0c6901008fc060b8190802011f80c30030b004023f018042e01008fc06", + "0x28c0c7e030087002011f80ca2030b004a25081cfc0650019160250018fc06", + "0x9120252818fc065228c0e88012900c7e032900c86012900c7e030091802", + "0x1f80c0c0304004a8031f80ca70320c04a7031f80ca55301d140253018fc06", + "0x1956063f01950060000954063f01942063480902063f0183e06338095206", + "0x191a02011f80c19030b004023f018042e01008fc060102404ab55205520c", + "0x95a063f0195a06430095a063f018048e012b00c7e030087002011f80c44", + "0x19060258018fc06572bc0e8a012bc0c7e03009120257018fc0656ab00e88", + "0x1f80c07031a404b3031f80c1f0319c04b2031f80c0c0304004b1031f80cb0", + "0x1f80c0217008047e0300812025aad166b2060196a063f0196206000096806", + "0x196e06430096e063f0180485012d80c7e030087002011f80c09032340402", + "0x18fc065c2e40e8a012e40c7e0300912025c018fc065bad80e88012dc0c7e", + "0x1a404bc031f80c120319c0480031f80c100304004bb031f80cba0320c04ba", + "0x8047e0300804025f2f57880060197c063f0197606000097a063f0180e06", + "0x11004023f01804090104820075f87c18073f01c0c020381c04023f0180406", + "0x1480c170105ca4073f01890062900890063f01888062400888063f0181206", + "0x8047e031540c1701074aa073f01832062900832063f018041901008fc06", + "0x300c100106c0c7e0306c0c1d010780c7e030740c550106c0c7e0305c0c55", + "0x1580c7e030083c02011f80c020480804c0011f80e1e0d81c360206018fc06", + "0x1f80c020480804c103008b0022c018fc0610818420210818fc062b018ac02", + "0x18be022c018fc062f81842022f818fc0612018480212018fc06010780402", + "0x8120214819842c031f80e630318c0463031f80c63030840463031f80c58", + "0xac0c2b010ac0c7e030085202011f80c2c030b004023f018042e01008fc06", + "0x19404023f0180409010c0ca07618b8c8073f01c561f06024c80215818fc06", + "0x1f80c07031a40436031f80c2e0319c0469031f80c67030c00467031f80c02", + "0x18c80608008da6a19824fc06370e06c0947808dc063f018d206198087006", + "0x8fc06380186c02011f80c0204808e806621c00c7e039b40c6d011900c7e", + "0xc7401008fc063e018e002001f00e7e031e40c6e011e40c7e030087002", + "0x18fc0632018200242818fc0642018f80242018fc0641818f20241818fc06", + "0x300c8a031f80c85030000489031f80c6a031a40488031f80c330319c0486", + "0x918063f018c8060800916063f018e80641808047e030081202452251086", + "0x235180c0323c0c7e0322c0c00012380c7e031a80c69012340c7e030cc0c67", + "0x1922064300922063f0180485012400c7e030087002011f80c02048091e8e", + "0x18fc064924c0e8a0124c0c7e03009120249018fc0648a400e88012440c7e", + "0x1a40496031f80c300319c0487031f80c65030400495031f80c940320c0494", + "0x8047e0300812024c25d2c870601930063f0192a06000092e063f0180e06", + "0x1cfc064d81916024d818fc0603818d202011f80c29030b004023f018042e", + "0x2700c86012700c7e03009180241018fc06010e004023f0193406160093499", + "0x1f80c9d4f01d14024f018fc0601224049d031f80c9c4101d10024e018fc06", + "0x940063f0183e063380944063f01818060800942063f0193e06418093e06", + "0x8fc060102404a451a81440c032900c7e032840c000128c0c7e032640c69", + "0x2980c7e030090a0252818fc06010e004023f018120646808047e030085c02", + "0x1d140254018fc060122404a7031f80ca65281d100253018fc06530190c02", + "0x1824063380954063f01820060800902063f01952064180952063f0194ea8", + "0x11004ad562ad540c032b40c7e032040c00012b00c7e0301c0c69012ac0c7e", + "0x192202011f80c02048081806628240e073f01c0c06480080c063f0180406", + "0x98c06011600412031f80c1f0324c0410031f80c0703248041f031f80c09", + "0x1f80c0c032480448031f80c44032500444031f80c020f008047e030081202", + "0x8a4063f018a40606008a4063f01820063a00824063f0189006498082006", + "0x192c022a818fc060b8190e02011f80c020480832066385c0c7e038480c95", + "0x18fc060126404023f01836064c0083c1b039f80c1d0325c041d031f80c55", + "0x25c0424031f80c1e0325804023f01842064c008b021039f80c560325c0456", + "0x1858064b80858063f018b0064b008047e0317c0c980118cbe073f0184806", + "0xb80c7e030ac0c96011900c7e0318c0c9601008fc06148193002158a40e7e", + "0x26c0465031f80c65032180465031f80c2e3201d340232018fc06320190c02", + "0x1f80c67030900467031f80c020f008047e0300812021801990023f01cca06", + "0x18600641008047e030081202013240c022c00866063f018d20610808d206", + "0x17c0433031f80c6d03084046d031f80c6a03158046a031f80c020f008047e", + "0x1870064e808dc063f018a4060600870063f0186c064e0086c063f0186606", + "0x1d00c7e030083c02011f80c19030b004023f0180409011c0dc07031c00c7e", + "0x1f00e0600018fc063c8193a023e018fc062901818023c818fc063a0193c02", + "0x27c04023f0183e0616008047e03008120208019941f031f80e0c0318c0400", + "0x1f80c07031a40419031f80c060319c0444031f80c12032840412031f80c02", + "0x1f80c1b0e954320c5000836063f0188806510083a063f018120619808aa06", + "0x1f80c1e0328c04023f0180409011580ccb0f018fc070b818da020b9489009", + "0x8be063f01890063380848063f018040608008047e031600c2c011604207", + "0x8fc06010240402660180458010b00c7e030840c330118c0c7e031480c69", + "0x18d20232018fc0624018ce0215818fc0601018200214818fc062b0194802", + "0xb004023f0180409011945c64158300c65031f80c2903294042e031f80c52", + "0x18040608008d267039f80c300329c0430031f80c090329804023f0182006", + "0x1d00c7e031a40ca8011c00c7e0301c0c69011b80c7e030180c67010e00c7e", + "0x24047c03334f2063f01c6c06408086c6d350cc187e031d0e06e1c0315202", + "0x18fc0641819580241818fc0600019560200018fc063c8195402011f80c02", + "0xcc048b031f80c6d031a4048a031f80c6a0319c0485031f80c67030c00484", + "0x2251086049f80c8d4622d140c500091a063f01908065100918063f0190a06", + "0x92290039f80c8e0328c04023f01804090123c0cce47018fc0744818da02", + "0xcc0c100125126073f01924065380924063f019200653008047e032440c2c", + "0x18fc064a01950024d018fc0644018d2024c818fc0643018ce024c018fc06", + "0x9380667a080c7e03a5c0c810125d2c874a830fc064da693298062a4049b", + "0x18fc064a81820024f018fc06012b4049d031f80c82032a804023f0180409", + "0x27c0e7e0328d40a204abc04a3031f80c9e032b804a0031f80c9d032b804a2", + "0x94c063f019480655008047e03008120252819a0a4031f80ea10320404a1", + "0x2980cae012ac0c7e0324c0ca8012a80c7e032580c69012040c7e0321c0c67", + "0x19a2ad031f80ea9032c404a95429c127e032b156aa40831600256018fc06", + "0x2bc0c3001008fc06580185802582bc0e7e032b40cb201008fc060102404ae", + "0x18fc0654018d2022f818fc0653818ce0212018fc064f818200258818fc06", + "0x2d004b3031f80cb21601d660259018fc0601078042c031f80cb1030cc0463", + "0x18c606348096c063f018be06338096a063f01848060800968063f0196606", + "0x2b80ca401008fc060102404b85bad96a0c032e00c7e032d00ca5012dc0c7e", + "0x18fc0654018d2025d818fc0653818ce025d018fc064f81820025c818fc06", + "0x1f80c93032d404023f0180409012f100bb5d0300cbc031f80cb9032940480", + "0x1a404d2031f80c870319c04be031f80c9f0304004bd031f80ca5032900402", + "0x8047e0300812026a34da4be06019a8063f0197a0652809a6063f0192c06", + "0x190e0633809ac063f0192a0608009aa063f019380652008047e0324c0cb5", + "0x2404d96c35dac0c033640c7e033540ca5013600c7e032580c690135c0c7e", + "0x18fc0643018ce026d818fc061981820026d018fc06478194802011f80c02", + "0x180409011fdbadc6d8300c7f031f80cda0329404dd031f80c88031a404dc", + "0x19c04df031f80c330304004de031f80c7c0329004023f018ce065a808047e", + "0x385c0df06019c4063f019bc0652809c2063f018da0634809c0063f018d406", + "0x1c0e0604818fc06030196c0203818fc0601018d20203018fc060107804e2", + "0x18d20222018fc0601018ce0206018fc06012dc0409031f80c07032980409", + "0x1489044062c00417031f80c0c032b80452031f80c09032a00448031f80c06", + "0x196402011f80c0204808aa06718640c7e038480cb101048201f049f80c17", + "0x18fc0601078041e031f80c1d030c004023f018360616008361d039f80c19", + "0x848063f0183e0633808b0063f01842065a00842063f018ac1e03acc0456", + "0x8047e0300812023197c48090318c0c7e031600ca50117c0c7e030400c69", + "0xb00ca5010ac0c7e030400c69010a40c7e0307c0c67010b00c7e031540ca4", + "0xe0040c031f80c1f032e0041f031f80c09032880464158a4120632018fc06", + "0x1f80c44032e804482201cfc0606019720209018fc06010e00410031f80c02", + "0x200041b031f80c12032ec041d031f80c10032ec0455031f80c48032880402", + "0x8ac1e039f80c52031b804023f018320616008321729024fc060d874aa09", + "0x1600c7001090b0073f0182e063700842063f018ac063a008047e030780c70", + "0x17c0c7e0317c0c0c010840c7e030840c0c0117c0c7e030900c7401008fc06", + "0x18041e01008fc06010240464158a412e41618c0e7e0397c4206010317802", + "0x19c0c7e030b00c69010c00c7e0318c0c67011940c7e030b80cbd010b80c7e", + "0x18fc0632019a402011f80c020480804e503008b00234818fc06328197c02", + "0x34c0469031f80c33032f80467031f80c2b031a40430031f80c290319c0433", + "0x240438033986c063f01cd4066a808d4063f018da066a008da063f018d206", + "0x1f80c70032d00470031f80c6e0381d660237018fc061b019ac02011f80c02", + "0x1800063f018e80652808f8063f018ce0634808f2063f018600633808e806", + "0x19c0483031f80c380329004023f0180e066b808047e030081202001f0f209", + "0x2190a84048190c063f0190606528090a063f018ce063480908063f0186006", + "0x1f80c0203040041f031f80c020c80818063f01804d801008fc06048196a02", + "0x8aa063f0183e060e80832063f0180e06348082e063f0180c0633808a406", + "0x1c90066d808904409040187e03074aa190b9483eda010740c7e030300cd9", + "0x18fc062b019ba022b018fc060d819b802011f80c02048083c067386c0c7e", + "0x8047e0300812022f819d024031f80e21032040421031f80c58031fc0458", + "0x400c10010a40c7e030b00cdf010b00c7e0318c0cde0118c0c7e030900caa", + "0x18fc0614819c00217018fc0622018d20232018fc0609018ce0215818fc06", + "0x1f80c10030400430031f80c5f0338404023f0180409011945c64158300c65", + "0x18d4063f01860067000866063f018880634808d2063f018240633808ce06", + "0xd80c7e030400c10011b40c7e030780ce101008fc0601024046a199a4ce0c", + "0xd8180638018fc0636819c00237018fc0622018d2021c018fc0609018ce02", + "0x19d402011f80c0204808201f03ba41809039f80e070300812e2011c0dc38", + "0x9d806011600448031f80c12033ac0444031f80c09030400412031f80c0c", + "0x18a4067580888063f0183e0608008a4063f018200676808047e030081202", + "0x83a063f0182e0643008aa063f0189006778082e063f01804ee011200c7e", + "0x2a804023f0180409010780cf10d818fc070c81902020c818fc060e9540ef0", + "0x18880608008b0063f01842066f80842063f018ac066f008ac063f0183606", + "0x1f80c1e0338404023f01804090117c48070317c0c7e031600ce0010900c7e", + "0x180e0653808522c0381852063f018c6067000858063f018880608008c606", + "0x824063f01812067900820063f01804d801008fc060f8196a020f8300e7e", + "0x1888067a00890063f01890060e80890063f0180419011100c7e030400cf3", + "0x8fc0601024041d2a86412f60b9480e7e038488848030083ef5011100c7e", + "0x5c0c69011580c7e031480c67010780c7e0306c0cbd0106c0c7e030083c02", + "0x19a402011f80c020480804f703008b0022c018fc060f0197c0210818fc06", + "0x1f80c24032f80421031f80c55031a40456031f80c190319c0424031f80c1d", + "0x3e058063f01cbe066a808be063f018c6066a008c6063f018b00669808b006", + "0x3e80464031f80c2b0601df20215818fc0616019ac02011f80c02048085206", + "0x185c067d80860063f018420634808ca063f018ac06338085c063f018c806", + "0x1f80c29033f004023f01818065a808047e030081202338c0ca090319c0c7e", + "0x18da063f018d2067d808d4063f01842063480866063f018ac0633808d206", + "0x818067f0240c7e038080cfd010180c0603018fc06010194402369a86609", + "0x1f80c1f0301d10020f818fc060f8190c020f818fc06013fc04023f0180409", + "0x832063f0180e065d8082e063f01820065d808a4063f0181206800082006", + "0x8aa063f01824065d808047e031200c2c011208812049f80c190b9481301", + "0x836063f018050301008fc06010240402810180458010740c7e031100cbb", + "0x19760212018fc060601a08020f018fc060d8180e880106c0c7e0306c0c86", + "0xb0045810958127e0318cbe2404c140463031f80c07032ec045f031f80c1e", + "0x18fc0601078041d031f80c21032ec0455031f80c56032ec04023f018b006", + "0x240c64031f80c2c032d8042b031f80c1d034180429031f80c5503418042c", + "0x18fc060301a1202011f80c02048080e06840180c7e038080d07011905629", + "0x8047e0300812020f8180c1f031f80c0c0342c040c031f80c09034280409", + "0x1100d0b011100c7e030480d0c010480c7e0301c20074500820063f0180489", + "0x4820093f01c3e0903818190d0107c0c7e030300cf3011200c0624018fc06", + "0x18fc06220190c020e818fc06010182002011f80c02048082e52240261c44", + "0x480c7e030480c69010400c7e030400c670115432073f018361d03c3c041b", + "0x4480421031f80c1e0330004023f0180409011580d110f018fc072a81a2002", + "0x18200633808be063f01832060800848063f018b00689808b0063f0184206", + "0x2404291618cbe0c030a40c7e030900d14010b00c7e030480c690118c0c7e", + "0x2180464031f80c026080856063f018043801008fc062b0185802011f80c02", + "0xb8ca0745008ca063f0180489010b80c7e03190560744008c8063f018c806", + "0x18fc0608018ce0234818fc060c818200233818fc061801a2a0218018fc06", + "0x180409011b4d433348300c6d031f80c6703450046a031f80c12031a40433", + "0x8dc063f01870068980870063f0186c06890086c063f0182e068b008047e", + "0x1b80d14011e40c7e031480c69011d00c7e031200c67011c00c7e030080c10", + "0x8fc06010240407034600c063f01c04068b808f8793a1c018063e018fc06", + "0x7c0c060f818fc0606019c00206018fc0604819be0204818fc0603019bc02", + "0x1824067080824063f0180e1003a280410031f80c0244808047e030081202", + "0x240409034680e063f01c04068c8089006031200c7e031100ce0011100c7e", + "0x7c0c7e030300cdf010300c7e0301c0cde01008fc06030193002011f80c02", + "0x87002011f80c090346c04023f0180409010400c0608018fc060f819c002", + "0x1f80c442401d140224018fc06012240444031f80c060901d100209018fc06", + "0x1f80c020347004190301832063f0182e06700082e063f018a40670808a406", + "0x300e7e0304820078e80824063f0180e065d80820063f0181206570081206", + "0x300cbb011200c7e030180cbb011100c7e030083c02011f80c1f030b0041f", + "0x83c02011f80c020347804172912012060b818fc06220196c0229018fc06", + "0x18fc06048196c020f818fc0603819760206018fc0603019760204818fc06", + "0x8fc060102404100f83013200481c0e7e0381804078f808201f060240c10", + "0x8b00224018fc060901a440222018fc0603818200209018fc060481a4202", + "0x7804023f018a40692808a4063f018201f03c9004023f01804090100a4606", + "0x1f80c19034880444031f80c0c030400419031f80c17034980417031f80c02", + "0x180406948083a55038183a063f018900694008aa063f0188806938089006", + "0x8fc060601930020f8300e7e030240c97010240c7e0301c0cf20101c0c7e", + "0x82410039f80c482201e540224018fc0603019760222018fc060f8190c02", + "0x1f80c52032d80417031f80c10032ec0452031f80c020f008047e030480c2c", + "0x18041e010240c7e0301c0c07440080e063f01804064b0083217038183206", + "0x18040c2f8403e07030400c7e030300cb60107c0c7e030240cbb010300c7e", + "0x3d4120703008b05503008181f2a818040c010240e0601160aa06010303e55", + "0x1caa0696030120703008ac550300818120c9540c020fcac04440f81c3e06", + "0x1804562a81812640c9540c0c9701c0c022b1540c090c9540c09968082055", + "0x1804650101c52290102660090381804652a818040c0b9540c02064bc1207", + "0x24120932026660232018c806990240e060119caa06048a42e55030326207", + "0x1c0c02371540c02061b49055030083f35011a80c69034d00e06010401209", + "0x180410048241209048ac133803008ca06039c00f37011940c36034d81809", + "0x1c122903cec0c023c8080e070101e7407030082009048241209160267207", + "0x27a060104012070481c0f3c030082009" + ], + "sierra_program_debug_info": { + "type_names": [], + "libfunc_names": [], + "user_func_names": [] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x966af5d72d3975f70858b044c77785d3710638bbcebbd33cc7001a91025588", + "function_idx": 0 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [ + { + "selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "function_idx": 1 + } + ] + }, + "abi": [ + { + "type": "constructor", + "name": "constructor", + "inputs": [] + }, + { + "type": "enum", + "name": "core::bool", + "variants": [ + { + "name": "False", + "type": "()" + }, + { + "name": "True", + "type": "()" + } + ] + }, + { + "type": "function", + "name": "emit_event", + "inputs": [ + { + "name": "incremental", + "type": "core::bool" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "event", + "name": "events::events::ContractWithEvent::IncrementalEvent", + "kind": "struct", + "members": [ + { + "name": "value", + "type": "core::integer::u128", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "events::events::ContractWithEvent::StaticEvent", + "kind": "struct", + "members": [] + }, + { + "type": "event", + "name": "events::events::ContractWithEvent::Event", + "kind": "enum", + "variants": [ + { + "name": "IncrementalEvent", + "type": "events::events::ContractWithEvent::IncrementalEvent", + "kind": "nested" + }, + { + "name": "StaticEvent", + "type": "events::events::ContractWithEvent::StaticEvent", + "kind": "nested" + } + ] + } + ] +} \ No newline at end of file diff --git a/starknet_programs/raw_contract_classes/0x472a8c75c832b112ac174abc3b46e7e79464ad52ecdad80079ddfe486ca5eef.casm b/starknet_programs/raw_contract_classes/0x472a8c75c832b112ac174abc3b46e7e79464ad52ecdad80079ddfe486ca5eef.casm new file mode 100644 index 000000000..e8527a982 --- /dev/null +++ b/starknet_programs/raw_contract_classes/0x472a8c75c832b112ac174abc3b46e7e79464ad52ecdad80079ddfe486ca5eef.casm @@ -0,0 +1,1429 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.0.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffefe08", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x79", + "0x4825800180007ffa", + "0x101f8", + "0x400280007ff97fff", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xf9", + "0x482680017ff98000", + "0x1", + "0x20680017fff7ffd", + "0x60", + "0x48307ffb80007ffc", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x3d", + "0x1104800180018000", + "0x354", + "0x482480017fff8000", + "0x353", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fe1", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff37fff", + "0x10780017fff7fff", + "0x20", + "0x4824800180007fe1", + "0x0", + "0x400080007ff47fff", + "0x482480017ff48000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x1104800180018000", + "0xfe", + "0x20680017fff7ffd", + "0xc", + "0x40780017fff7fff", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017ff18000", + "0x1", + "0x48127fdc7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x15a", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff47fff8000", + "0x48127fdf7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ffd7fff8000", + "0x48127fe87fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xffffffffffffffffffffffffffffe3b8", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x64", + "0x4825800180007ffa", + "0x1c48", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x482680017ff98000", + "0x1", + "0x4824800180007ffe", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x3c", + "0x1104800180018000", + "0x2cd", + "0x482480017fff8000", + "0x2cc", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff4", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff47fff", + "0x10780017fff7fff", + "0x1f", + "0x4824800180007ff4", + "0x0", + "0x400080007ff57fff", + "0x48127fff7fff8000", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0xfe", + "0x482480017fd48000", + "0x1", + "0x20680017fff7ffc", + "0xc", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127fff7fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017ff28000", + "0x1", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0xd4", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff57fff8000", + "0x48127ff27fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x10780017fff7fff", + "0x8", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x20680017fff7ffc", + "0x15", + "0x480080007ffd8000", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x6", + "0x480680017fff8000", + "0x1", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x48307ffb80007ffc", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x4", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffd", + "0x1d", + "0x40780017fff7fff", + "0x96", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x1104800180018000", + "0x92", + "0x20680017fff7ffd", + "0x7", + "0x480a7ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x10780017fff7fff", + "0x35", + "0x40780017fff7fff", + "0x3", + "0x480a7ffa7fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0xc1", + "0x20680017fff7ffd", + "0x56", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0x73", + "0x20680017fff7ffd", + "0x43", + "0x48127fb17fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0xb1", + "0x20680017fff7ffd", + "0x32", + "0x48127ffa7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x1", + "0x1104800180018000", + "0xd6", + "0x20680017fff7ffd", + "0x20", + "0x48127fe57fff8000", + "0x48127fe57fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0xf9", + "0x20680017fff7ffd", + "0xf", + "0x48127fe47fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x3", + "0x48127fe17fff8000", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff77fff8000", + "0x48127ff77fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1b", + "0x48127fe17fff8000", + "0x48127fc97fff8000", + "0x48127fc97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127fdf7fff8000", + "0x48127fdf7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x31", + "0x48127fc97fff8000", + "0x48127fc97fff8000", + "0x48127fc97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127fc97fff8000", + "0x48127fc97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x65", + "0x48127f4c7fff8000", + "0x48127f957fff8000", + "0x48127f957fff8000", + "0x480680017fff8000", + "0x1", + "0x48127f957fff8000", + "0x48127f957fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xae", + "0x48127f4c7fff8000", + "0x48127f4c7fff8000", + "0x48127f4c7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127f4c7fff8000", + "0x48127f4c7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x1104800180018000", + "0xb0", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xce", + "0x40780017fff7fff", + "0x1", + "0x40780017fff7fff", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0xc5", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x456d69744576656e74", + "0x400280007ffb7fff", + "0x400380017ffb7ffa", + "0x400280027ffb7ffb", + "0x400280037ffb7ffc", + "0x400280047ffb7ffd", + "0x400280057ffb7ffe", + "0x480280077ffb8000", + "0x20680017fff7fff", + "0xd", + "0x480280067ffb8000", + "0x482680017ffb8000", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x9", + "0x480280067ffb8000", + "0x482680017ffb8000", + "0xa", + "0x480680017fff8000", + "0x1", + "0x480280087ffb8000", + "0x480280097ffb8000", + "0x1104800180018000", + "0xc6", + "0x20680017fff7ffd", + "0xb", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1afeeaff0ed5cee7d05a21078399c2f56226b0cd5657062500cef4c4e736f85", + "0x1104800180018000", + "0xb9", + "0x20680017fff7ffc", + "0x1a", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0xee", + "0x20680017fff7ffd", + "0xb", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x8", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x482a7ffd7ffc8001", + "0xa0680017fff7fff", + "0x7", + "0x4824800180007fff", + "0x100000000000000000000000000000000", + "0x400280007ffb7fff", + "0x10780017fff7fff", + "0xc", + "0x400280007ffb7fff", + "0x40780017fff7fff", + "0x1", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x7", + "0x482680017ffb8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x753132385f616464204f766572666c6f77", + "0x1104800180018000", + "0xc3", + "0x20680017fff7ffd", + "0x9", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1afeeaff0ed5cee7d05a21078399c2f56226b0cd5657062500cef4c4e736f85", + "0x480680017fff8000", + "0x53746f726167655772697465", + "0x400280007ffc7fff", + "0x400380017ffc7ffb", + "0x400280027ffc7ffd", + "0x400280037ffc7ffe", + "0x400380047ffc7ffd", + "0x480280067ffc8000", + "0x20680017fff7fff", + "0xd", + "0x480280057ffc8000", + "0x482680017ffc8000", + "0x7", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x9", + "0x480280057ffc8000", + "0x482680017ffc8000", + "0x9", + "0x480680017fff8000", + "0x1", + "0x480280077ffc8000", + "0x480280087ffc8000", + "0x1104800180018000", + "0x3b", + "0x20680017fff7ffd", + "0xb", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ff8", + "0x13", + "0x480680017fff8000", + "0x477e157efde59c5531277ede78acb3e03ef69508c6c35fde3495aa0671d227", + "0x400280007ffb7fff", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x83", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x10780017fff7fff", + "0x12", + "0x40780017fff7fff", + "0xf", + "0x480680017fff8000", + "0x1d3bd105efd11cb4e1d188c3f2b302935b4db511160389bd8b0a936ce967708", + "0x400280007ffb7fff", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x7b", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x9", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x53746f7261676552656164", + "0x400280007ffb7fff", + "0x400380017ffb7ffa", + "0x400380027ffb7ffc", + "0x400380037ffb7ffd", + "0x480280057ffb8000", + "0x20680017fff7fff", + "0x28", + "0x480a7ff97fff8000", + "0x480280067ffb8000", + "0x1104800180018000", + "0x60", + "0x480280047ffb8000", + "0x482680017ffb8000", + "0x7", + "0x20680017fff7ffc", + "0xf", + "0x40780017fff7fff", + "0x2", + "0x48127ff97fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff57fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x53746f7261676541636365737355313238202d206e6f6e2075313238", + "0x400080007ffe7fff", + "0x48127ff97fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x480a7ff97fff8000", + "0x480280047ffb8000", + "0x482680017ffb8000", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480280067ffb8000", + "0x480280077ffb8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0xa", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x400180007fff7ffd", + "0x480680017fff8000", + "0x1", + "0x48127ffe7fff8000", + "0x482480017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ff97fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x33", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x16", + "0x480280007ffc8003", + "0x480280017ffc8003", + "0x4844800180017ffe", + "0x100000000000000000000000000000000", + "0x483180017ffd7ffd", + "0x482480017fff7ffd", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7ffc", + "0x6", + "0x402480017fff7ffd", + "0xffffffffffffffffffffffffffffffff", + "0x10780017fff7fff", + "0x4", + "0x402480017ffe7ffd", + "0xf7ffffffffffffef0000000000000000", + "0x400280027ffc7ffd", + "0x20680017fff7ffe", + "0xe", + "0x402780017fff7fff", + "0x1", + "0x400380007ffc7ffd", + "0x40780017fff7fff", + "0x5", + "0x482680017ffc8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ffc8000", + "0x3", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x5", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x208b7fff7fff7ffe", + "0x400380007ffd7ffb", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x101f8" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 41, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -30 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 62, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 80, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 98, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 112, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 126, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 141, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x1c48" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 176, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -11 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 196, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 214, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 232, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 246, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 472, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 474, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 496, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -5 + } + } + } + } + ] + ], + [ + 583, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "AP", + "offset": 0 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "dst": { + "register": "AP", + "offset": -1 + } + } + } + ] + ], + [ + 635, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -4 + } + } + } + } + ] + ], + [ + 735, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -5 + } + } + } + } + ] + ], + [ + 760, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 812, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 836, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 838, + [ + { + "DivMod": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "quotient": { + "register": "AP", + "offset": 3 + }, + "remainder": { + "register": "AP", + "offset": 4 + } + } + } + ] + ] + ], + "pythonic_hints": [ + [ + 0, + [ + "memory[ap + 0] = 66040 <= memory[fp + -6]" + ] + ], + [ + 41, + [ + "memory[ap + 0] = 0 <= memory[ap + -30]" + ] + ], + [ + 62, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 80, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 98, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 112, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 126, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 141, + [ + "memory[ap + 0] = 7240 <= memory[fp + -6]" + ] + ], + [ + 176, + [ + "memory[ap + 0] = 0 <= memory[ap + -11]" + ] + ], + [ + 196, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 214, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 232, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 246, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 472, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 474, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 496, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -5])" + ] + ], + [ + 583, + [ + "memory[ap + -1] = memory[ap + 0] < 340282366920938463463374607431768211456" + ] + ], + [ + 635, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -4])" + ] + ], + [ + 735, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -5])" + ] + ], + [ + 760, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 812, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 836, + [ + "memory[ap + 0] = memory[fp + -3] < 340282366920938463463374607431768211456" + ] + ], + [ + 838, + [ + "(memory[ap + 3], memory[ap + 4]) = divmod(memory[fp + -3], 340282366920938463463374607431768211456)" + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x966af5d72d3975f70858b044c77785d3710638bbcebbd33cc7001a91025588", + "offset": 0, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [ + { + "selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "offset": 141, + "builtins": [ + "range_check" + ] + } + ] + } +} \ No newline at end of file diff --git a/starknet_programs/raw_contract_classes/3010533bd60cb0e70ac1bf776e171713f0e5229a084989d3894c171c160ace2.casm b/starknet_programs/raw_contract_classes/3010533bd60cb0e70ac1bf776e171713f0e5229a084989d3894c171c160ace2.casm new file mode 100644 index 000000000..a3629918d --- /dev/null +++ b/starknet_programs/raw_contract_classes/3010533bd60cb0e70ac1bf776e171713f0e5229a084989d3894c171c160ace2.casm @@ -0,0 +1,524 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.0.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xffffffffffffffffffffffffffff43f4", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x68", + "0x4825800180007ffa", + "0xbc0c", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x482680017ff98000", + "0x1", + "0x4824800180007ffe", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x40", + "0x1104800180018000", + "0x118", + "0x482480017fff8000", + "0x117", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007ff4", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff47fff", + "0x10780017fff7fff", + "0x23", + "0x4824800180007ff4", + "0x0", + "0x400080007ff57fff", + "0x48127fff7fff8000", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x4b", + "0x482480017f268000", + "0x1", + "0x20680017fff7ffc", + "0x10", + "0x40780017fff7fff", + "0x1", + "0x48127fff7fff8000", + "0x48127ffe7fff8000", + "0x1104800180018000", + "0x81", + "0x48127ff87fff8000", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127fff7fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017ff28000", + "0x1", + "0x48127fef7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x62", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff57fff8000", + "0x48127ff27fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x1104800180018000", + "0x3f", + "0x20680017fff7ffd", + "0x2f", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x2", + "0x1104800180018000", + "0x35", + "0x20680017fff7ffd", + "0x1c", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x3", + "0x1104800180018000", + "0x2b", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x42", + "0x48127fb97fff8000", + "0x48127fb97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127fb97fff8000", + "0x48127fb97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x84", + "0x48127f777fff8000", + "0x48127f777fff8000", + "0x480680017fff8000", + "0x1", + "0x48127f777fff8000", + "0x48127f777fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x43", + "0x40780017fff7fff", + "0x1", + "0x40780017fff7fff", + "0x1", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x1104800180018000", + "0x3a", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x456d69744576656e74", + "0x400280007ffb7fff", + "0x400380017ffb7ffa", + "0x400280027ffb7ffb", + "0x400280037ffb7ffc", + "0x400280047ffb7ffd", + "0x400280057ffb7ffe", + "0x480280077ffb8000", + "0x20680017fff7fff", + "0xd", + "0x480280067ffb8000", + "0x482680017ffb8000", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x9", + "0x480280067ffb8000", + "0x482680017ffb8000", + "0xa", + "0x480680017fff8000", + "0x1", + "0x480280087ffb8000", + "0x480280097ffb8000", + "0x1104800180018000", + "0x27", + "0x20680017fff7ffd", + "0xb", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x363b90c0b8be133a6373701cce2f678d73ec604cb810f4d8b511c6a3ea4fcfd", + "0x400280007ffb7fff", + "0x480a7ff97fff8000", + "0x480a7ffa7fff8000", + "0x482680017ffb8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x15", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x9", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ff97fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x7", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x400380007ffd7ffb", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xbc0c" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 35, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -11 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 55, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 77, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 95, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 109, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 197, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 199, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 221, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -5 + } + } + } + } + ] + ] + ], + "pythonic_hints": [ + [ + 0, + [ + "memory[ap + 0] = 48140 <= memory[fp + -6]" + ] + ], + [ + 35, + [ + "memory[ap + 0] = 0 <= memory[ap + -11]" + ] + ], + [ + 55, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 77, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 95, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 109, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 197, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 199, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 221, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -5])" + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x2e8359222ced3eab92eabe6442847adf1c8234edbdea21c3fa8b2d5573346c4", + "offset": 0, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} \ No newline at end of file diff --git a/starknet_programs/raw_contract_classes/321aadcf42b0a4ad905616598d16c42fa9b87c812dc398e49b57bf77930629f.casm b/starknet_programs/raw_contract_classes/321aadcf42b0a4ad905616598d16c42fa9b87c812dc398e49b57bf77930629f.casm new file mode 100644 index 000000000..bf0ff34ca --- /dev/null +++ b/starknet_programs/raw_contract_classes/321aadcf42b0a4ad905616598d16c42fa9b87c812dc398e49b57bf77930629f.casm @@ -0,0 +1,1097 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.0.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xffffffffffffffffffffffffffff8a94", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7e", + "0x4825800180007ffa", + "0x756c", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x111", + "0x20680017fff7ffe", + "0x65", + "0x48307ffc80007ffd", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x42", + "0x1104800180018000", + "0x25f", + "0x482480017fff8000", + "0x25e", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x25", + "0x4824800180007fd7", + "0x0", + "0x400080007ff07fff", + "0x482480017ff08000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffb7fff8000", + "0x48127ff17fff8000", + "0x1104800180018000", + "0x11b", + "0x20680017fff7ffd", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0x13b", + "0x48127feb7fff8000", + "0x48127feb7fff8000", + "0x48127feb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017fed8000", + "0x1", + "0x48127fd27fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x121", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff07fff8000", + "0x48127fd57fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff97fff8000", + "0x48127fde7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xffffffffffffffffffffffffffffd346", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x79", + "0x4825800180007ffa", + "0x2cba", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x7f", + "0x20680017fff7ffe", + "0x60", + "0x48307ffc80007ffd", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x3d", + "0x1104800180018000", + "0x1cd", + "0x482480017fff8000", + "0x1cc", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fef7fff", + "0x10780017fff7fff", + "0x20", + "0x4824800180007fd7", + "0x0", + "0x400080007ff07fff", + "0x48127fff7fff8000", + "0x480a7ffb7fff8000", + "0x48127ff27fff8000", + "0x1104800180018000", + "0xbe", + "0x482480017fce8000", + "0x1", + "0x20680017fff7ffc", + "0xc", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127fff7fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017fed8000", + "0x1", + "0x48127fd27fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x94", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff07fff8000", + "0x48127fd57fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff97fff8000", + "0x48127fde7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x10780017fff7fff", + "0x8", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x20680017fff7ffc", + "0x17", + "0x480a7ffb7fff8000", + "0x480080007ffc8000", + "0x1104800180018000", + "0x67", + "0x20680017fff7ffe", + "0x9", + "0x48127ffd7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffd7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0xd", + "0x480a7ffb7fff8000", + "0x48127ff07fff8000", + "0x48127ff07fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x6e", + "0x20680017fff7ffd", + "0x1a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x94", + "0x20680017fff7ffd", + "0xb", + "0x48127fe27fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127fe27fff8000", + "0x208b7fff7fff7ffe", + "0x48127fe27fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x18", + "0x48127fe27fff8000", + "0x48127fe27fff8000", + "0x48127fe27fff8000", + "0x480680017fff8000", + "0x1", + "0x48127fe27fff8000", + "0x48127fe27fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xa6", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x68", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8000", + "0x16", + "0x480280007ffc8003", + "0x480280017ffc8003", + "0x4844800180017ffe", + "0x100000000000000000000000000000000", + "0x483180017ffd7ffd", + "0x482480017fff7ffd", + "0x800000000000010fffffffffffffffff7ffffffffffffef0000000000000001", + "0x20680017fff7ffc", + "0x6", + "0x402480017fff7ffd", + "0xffffffffffffffffffffffffffffffff", + "0x10780017fff7fff", + "0x4", + "0x402480017ffe7ffd", + "0xf7ffffffffffffef0000000000000000", + "0x400280027ffc7ffd", + "0x20680017fff7ffe", + "0xe", + "0x402780017fff7fff", + "0x1", + "0x400380007ffc7ffd", + "0x40780017fff7fff", + "0x5", + "0x482680017ffc8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ffc8000", + "0x3", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1afeeaff0ed5cee7d05a21078399c2f56226b0cd5657062500cef4c4e736f85", + "0x1104800180018000", + "0x5f", + "0x20680017fff7ffc", + "0x1a", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0x94", + "0x20680017fff7ffd", + "0xb", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x8", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff27fff8000", + "0x48127ff27fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1afeeaff0ed5cee7d05a21078399c2f56226b0cd5657062500cef4c4e736f85", + "0x480680017fff8000", + "0x53746f726167655772697465", + "0x400280007ffc7fff", + "0x400380017ffc7ffb", + "0x400280027ffc7ffd", + "0x400280037ffc7ffe", + "0x400380047ffc7ffd", + "0x480280067ffc8000", + "0x20680017fff7fff", + "0xd", + "0x480280057ffc8000", + "0x482680017ffc8000", + "0x7", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x9", + "0x480280057ffc8000", + "0x482680017ffc8000", + "0x9", + "0x480680017fff8000", + "0x1", + "0x480280077ffc8000", + "0x480280087ffc8000", + "0x1104800180018000", + "0x62", + "0x20680017fff7ffd", + "0xb", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x400380007ffd7ffb", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x53746f7261676552656164", + "0x400280007ffb7fff", + "0x400380017ffb7ffa", + "0x400380027ffb7ffc", + "0x400380037ffb7ffd", + "0x480280057ffb8000", + "0x20680017fff7fff", + "0x28", + "0x480a7ff97fff8000", + "0x480280067ffb8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffff69", + "0x480280047ffb8000", + "0x482680017ffb8000", + "0x7", + "0x20680017fff7ffc", + "0xf", + "0x40780017fff7fff", + "0x2", + "0x48127ff97fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff57fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x53746f7261676541636365737355313238202d206e6f6e2075313238", + "0x400080007ffe7fff", + "0x48127ff97fff8000", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ff97fff8000", + "0x482480017ff88000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x11", + "0x480a7ff97fff8000", + "0x480280047ffb8000", + "0x482680017ffb8000", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x1", + "0x480280067ffb8000", + "0x480280077ffb8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x9", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x756c" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 41, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -40 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 62, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 85, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 103, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 117, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 131, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 146, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x2cba" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 187, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -40 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 208, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 226, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 244, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 258, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 272, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 415, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 417, + [ + { + "DivMod": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "rhs": { + "Immediate": "0x100000000000000000000000000000000" + }, + "quotient": { + "register": "AP", + "offset": 3 + }, + "remainder": { + "register": "AP", + "offset": 4 + } + } + } + ] + ], + [ + 510, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -4 + } + } + } + } + ] + ], + [ + 562, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -5 + } + } + } + } + ] + ], + [ + 587, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ] + ], + "pythonic_hints": [ + [ + 0, + [ + "memory[ap + 0] = 30060 <= memory[fp + -6]" + ] + ], + [ + 41, + [ + "memory[ap + 0] = 0 <= memory[ap + -40]" + ] + ], + [ + 62, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 85, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 103, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 117, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 131, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 146, + [ + "memory[ap + 0] = 11450 <= memory[fp + -6]" + ] + ], + [ + 187, + [ + "memory[ap + 0] = 0 <= memory[ap + -40]" + ] + ], + [ + 208, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 226, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 244, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 258, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 272, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 415, + [ + "memory[ap + 0] = memory[fp + -3] < 340282366920938463463374607431768211456" + ] + ], + [ + 417, + [ + "(memory[ap + 3], memory[ap + 4]) = divmod(memory[fp + -3], 340282366920938463463374607431768211456)" + ] + ], + [ + 510, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -4])" + ] + ], + [ + 562, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -5])" + ] + ], + [ + 587, + [ + "memory[ap + 0] = segments.add()" + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x1b1a0649752af1b28b3dc29a1556eee781e4a4c3a1f7f53f90fa834de098c4d", + "offset": 0, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [ + { + "selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "offset": 146, + "builtins": [ + "range_check" + ] + } + ] + } +} \ No newline at end of file diff --git a/starknet_programs/raw_contract_classes/53ad3bfb13f39cf1a9940108be4f9c6a8d9cc48a59d5f9b3c73432f877f8cf0.casm b/starknet_programs/raw_contract_classes/53ad3bfb13f39cf1a9940108be4f9c6a8d9cc48a59d5f9b3c73432f877f8cf0.casm new file mode 100644 index 000000000..c4da4fc1c --- /dev/null +++ b/starknet_programs/raw_contract_classes/53ad3bfb13f39cf1a9940108be4f9c6a8d9cc48a59d5f9b3c73432f877f8cf0.casm @@ -0,0 +1,755 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.0.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xffffffffffffffffffffffffffffc144", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x93", + "0x4825800180007ffa", + "0x3ebc", + "0x400280007ff97fff", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x9b", + "0x482680017ff98000", + "0x1", + "0x20680017fff7ffd", + "0x7a", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x1104800180018000", + "0x93", + "0x20680017fff7ffe", + "0x66", + "0x48307ffc80007ffd", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x43", + "0x1104800180018000", + "0x158", + "0x482480017fff8000", + "0x157", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fd6", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fe47fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fd6", + "0x0", + "0x400080007fe57fff", + "0x482480017fe58000", + "0x1", + "0x48127ffe7fff8000", + "0x480a7ffb7fff8000", + "0x48127fe17fff8000", + "0x48127ff07fff8000", + "0x1104800180018000", + "0x8a", + "0x20680017fff7ffd", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0xd7", + "0x48127feb7fff8000", + "0x48127feb7fff8000", + "0x48127feb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017fe28000", + "0x1", + "0x48127fd17fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0xbd", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127fe57fff8000", + "0x48127fd47fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127fee7fff8000", + "0x48127fdd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ffd7fff8000", + "0x48127fec7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x10780017fff7fff", + "0x8", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x20680017fff7ffc", + "0x8", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x0", + "0x480080007ffa8000", + "0x208b7fff7fff7ffe", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x64", + "0x400080007ffe7fff", + "0x480a7ff97fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x59", + "0x48127ff17fff8000", + "0x482480017ff08000", + "0x1", + "0x20680017fff7ffc", + "0x3a", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x4465706c6f79", + "0x400280007ffb7fff", + "0x400380017ffb7ffa", + "0x400280027ffb7ff9", + "0x400380037ffb7ffd", + "0x400280047ffb7ffc", + "0x400280057ffb7ffd", + "0x400280067ffb7ffe", + "0x480280087ffb8000", + "0x20680017fff7fff", + "0xc", + "0x480280077ffb8000", + "0x482680017ffb8000", + "0xc", + "0x480680017fff8000", + "0x0", + "0x480280097ffb8000", + "0x4802800a7ffb8000", + "0x4802800b7ffb8000", + "0x10780017fff7fff", + "0xb", + "0x480280077ffb8000", + "0x482680017ffb8000", + "0xb", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480280097ffb8000", + "0x4802800a7ffb8000", + "0x1104800180018000", + "0x55", + "0x20680017fff7ffc", + "0xb", + "0x48127fde7fff8000", + "0x48127fe77fff8000", + "0x48127fe77fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ff87fff8000", + "0x208b7fff7fff7ffe", + "0x48127fde7fff8000", + "0x48127fe77fff8000", + "0x48127fe77fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1b", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7074696f6e3a3a756e77726170206661696c65642e", + "0x400080007ffe7fff", + "0x48127fde7fff8000", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x44", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0xa0680017fff8004", + "0xe", + "0x4825800180047ffd", + "0x800000000000000000000000000000000000000000000000000000000000000", + "0x484480017ffe8000", + "0x110000000000000000", + "0x48307ffe7fff8002", + "0x480280007ffc7ffc", + "0x480280017ffc7ffc", + "0x402480017ffb7ffd", + "0xffffffffffffffeeffffffffffffffff", + "0x400280027ffc7ffd", + "0x10780017fff7fff", + "0x13", + "0x484480017fff8001", + "0x8000000000000000000000000000000", + "0x48317fff80007ffd", + "0x480280007ffc7ffd", + "0x480280017ffc7ffd", + "0x402480017ffc7ffe", + "0xf8000000000000000000000000000000", + "0x400280027ffc7ffe", + "0x40780017fff7fff", + "0x1", + "0x482680017ffc8000", + "0x3", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x10780017fff7fff", + "0x8", + "0x482680017ffc8000", + "0x3", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x526573756c743a3a756e77726170206661696c65642e", + "0x1104800180018000", + "0x16", + "0x20680017fff7ffc", + "0x8", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x400380007ffd7ffb", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x20780017fff7ff9", + "0xa", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x400180007fff7ffd", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffd7fff8000", + "0x482480017ffc8000", + "0x1", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x3ebc" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 47, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -41 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 69, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 92, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 110, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 124, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 138, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 152, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 203, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 230, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -5 + } + } + } + } + ] + ], + [ + 275, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 299, + [ + { + "TestLessThan": { + "lhs": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "rhs": { + "Immediate": "0x800000000000000000000000000000000000000000000000000000000000000" + }, + "dst": { + "register": "AP", + "offset": 4 + } + } + } + ] + ], + [ + 303, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "AP", + "offset": 3 + } + }, + "scalar": { + "Immediate": "0x110000000000000000" + }, + "max_x": { + "Immediate": "0xffffffffffffffffffffffffffffffff" + }, + "x": { + "register": "AP", + "offset": -2 + }, + "y": { + "register": "AP", + "offset": -1 + } + } + } + ] + ], + [ + 313, + [ + { + "LinearSplit": { + "value": { + "Deref": { + "register": "FP", + "offset": -3 + } + }, + "scalar": { + "Immediate": "0x8000000000000000000000000000000" + }, + "max_x": { + "Immediate": "0xffffffffffffffffffffffffffffffff" + }, + "x": { + "register": "AP", + "offset": -1 + }, + "y": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 375, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ] + ], + "pythonic_hints": [ + [ + 0, + [ + "memory[ap + 0] = 16060 <= memory[fp + -6]" + ] + ], + [ + 47, + [ + "memory[ap + 0] = 0 <= memory[ap + -41]" + ] + ], + [ + 69, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 92, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 110, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 124, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 138, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 152, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 203, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 230, + [ + "syscall_handler.syscall(syscall_ptr=memory[fp + -5])" + ] + ], + [ + 275, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 299, + [ + "memory[ap + 4] = memory[fp + -3] < 3618502788666131106986593281521497120414687020801267626233049500247285301248" + ] + ], + [ + 303, + [ + "\n(value, scalar) = (memory[ap + 3], 313594649253062377472)\nx = min(value // scalar, 340282366920938463463374607431768211455)\ny = value - x * scalar\nmemory[ap + -2] = x\nmemory[ap + -1] = y\n" + ] + ], + [ + 313, + [ + "\n(value, scalar) = (memory[fp + -3], 10633823966279326983230456482242756608)\nx = min(value // scalar, 340282366920938463463374607431768211455)\ny = value - x * scalar\nmemory[ap + -1] = x\nmemory[ap + 0] = y\n" + ] + ], + [ + 375, + [ + "memory[ap + 0] = segments.add()" + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x2f459db2a642c91d279cdbe9185f3934bb1cde01b16f89896c71066cf42bb18", + "offset": 0, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} \ No newline at end of file diff --git a/starknet_programs/raw_contract_classes/6638ce6c9bf336d1781a388668fa2206d928df5d1fa6b92e4cb41004c7e3f89.casm b/starknet_programs/raw_contract_classes/6638ce6c9bf336d1781a388668fa2206d928df5d1fa6b92e4cb41004c7e3f89.casm new file mode 100644 index 000000000..03cf472ff --- /dev/null +++ b/starknet_programs/raw_contract_classes/6638ce6c9bf336d1781a388668fa2206d928df5d1fa6b92e4cb41004c7e3f89.casm @@ -0,0 +1,557 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.0.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0xfffffffffffffffffffffffffffff8ee", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0xa7", + "0x4825800180007ffa", + "0x712", + "0x400280007ff97fff", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0xaf", + "0x482680017ff98000", + "0x1", + "0x20680017fff7ffd", + "0x8e", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x1104800180018000", + "0xa7", + "0x20680017fff7ffe", + "0x7a", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x1104800180018000", + "0xa1", + "0x20680017fff7ffe", + "0x66", + "0x48307ffc80007ffd", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x43", + "0x1104800180018000", + "0xfa", + "0x482480017fff8000", + "0xf9", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fc7", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007fd57fff", + "0x10780017fff7fff", + "0x26", + "0x4824800180007fc7", + "0x0", + "0x400080007fd67fff", + "0x482480017fd68000", + "0x1", + "0x48127ffe7fff8000", + "0x48127fd37fff8000", + "0x48127fe27fff8000", + "0x48127ff07fff8000", + "0x1104800180018000", + "0x98", + "0x20680017fff7ffd", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0xd3", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017fd38000", + "0x1", + "0x48127fc27fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0xb6", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127fd67fff8000", + "0x48127fc57fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127fdf7fff8000", + "0x48127fce7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127fee7fff8000", + "0x48127fdd7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ffd7fff8000", + "0x48127fec7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x10780017fff7fff", + "0x8", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x20680017fff7ffc", + "0x8", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x0", + "0x480080007ffa8000", + "0x208b7fff7fff7ffe", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x4b", + "0x482480017fff8000", + "0x4a", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4825800180007ffa", + "0xa0a", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x2a", + "0x4825800180007ffa", + "0xa0a", + "0x400280007ff97fff", + "0x482680017ff98000", + "0x1", + "0x20780017fff7ffd", + "0x7", + "0x48127fff7fff8000", + "0x48127ffd7fff8000", + "0x480a7ffb7fff8000", + "0x10780017fff7fff", + "0xf", + "0x48127fff7fff8000", + "0x48127ffd7fff8000", + "0x480a7ffc7fff8000", + "0x482a7ffc7ffb8000", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe1", + "0x20680017fff7ffd", + "0xd", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x400380007ffd7ffb", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x712" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 53, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -56 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 75, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 98, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 116, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 130, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 144, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 158, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 172, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 228, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0xa0a" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 277, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ] + ], + "pythonic_hints": [ + [ + 0, + [ + "memory[ap + 0] = 1810 <= memory[fp + -6]" + ] + ], + [ + 53, + [ + "memory[ap + 0] = 0 <= memory[ap + -56]" + ] + ], + [ + 75, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 98, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 116, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 130, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 144, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 158, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 172, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 228, + [ + "memory[ap + 0] = 2570 <= memory[fp + -6]" + ] + ], + [ + 277, + [ + "memory[ap + 0] = segments.add()" + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x112e35f48499939272000bd72eb840e502ca4c3aefa8800992e8defb746e0c9", + "offset": 0, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} \ No newline at end of file diff --git a/starknet_programs/raw_contract_classes/7c48d040ceb3183837a0aff2adf33d879f790e202eb2c4b8622005c12252641.casm b/starknet_programs/raw_contract_classes/7c48d040ceb3183837a0aff2adf33d879f790e202eb2c4b8622005c12252641.casm new file mode 100644 index 000000000..c2420dff1 --- /dev/null +++ b/starknet_programs/raw_contract_classes/7c48d040ceb3183837a0aff2adf33d879f790e202eb2c4b8622005c12252641.casm @@ -0,0 +1,476 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "2.0.0", + "bytecode": [ + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7d", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x85", + "0x482680017ff98000", + "0x1", + "0x20680017fff7ffd", + "0x64", + "0x48307ffb80007ffc", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x41", + "0x1104800180018000", + "0xdb", + "0x482480017fff8000", + "0xda", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4824800180007fe5", + "0x0", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400080007ff37fff", + "0x10780017fff7fff", + "0x24", + "0x4824800180007fe5", + "0x0", + "0x400080007ff47fff", + "0x482480017ff48000", + "0x1", + "0x48127ffe7fff8000", + "0x48127ff17fff8000", + "0x1104800180018000", + "0x7c", + "0x20680017fff7ffd", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x48127ffd7fff8000", + "0x1104800180018000", + "0xb6", + "0x48127ff37fff8000", + "0x48127ff37fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482480017ff18000", + "0x1", + "0x48127fe07fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x99", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ff47fff8000", + "0x48127fe37fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x48127ffd7fff8000", + "0x48127fec7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x10780017fff7fff", + "0x8", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x20680017fff7ffc", + "0x8", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x0", + "0x480080007ffa8000", + "0x208b7fff7fff7ffe", + "0x48127ffe7fff8000", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x1104800180018000", + "0x4a", + "0x482480017fff8000", + "0x49", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4825800180007ffc", + "0x942", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x400280007ffb7fff", + "0x10780017fff7fff", + "0x29", + "0x4825800180007ffc", + "0x942", + "0x400280007ffb7fff", + "0x482680017ffb8000", + "0x1", + "0x20780017fff7ffd", + "0x8", + "0x48127fff7fff8000", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x10780017fff7fff", + "0xd", + "0x48127fff7fff8000", + "0x48127ffd7fff8000", + "0x4825800180007ffd", + "0x1", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe2", + "0x20680017fff7ffd", + "0xd", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48527ffd7ffd8000", + "0x48127ffd7fff8000", + "0x48127ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ffb8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x482480017ffa8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x400380007ffd7ffb", + "0x480a7ffc7fff8000", + "0x482680017ffd8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 0, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 41, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "AP", + "offset": -26 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 61, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 84, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 102, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 116, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 130, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 186, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x942" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -4 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 234, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ] + ], + "pythonic_hints": [ + [ + 0, + [ + "memory[ap + 0] = 0 <= memory[fp + -6]" + ] + ], + [ + 41, + [ + "memory[ap + 0] = 0 <= memory[ap + -26]" + ] + ], + [ + 61, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 84, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 102, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 116, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 130, + [ + "memory[ap + 0] = segments.add()" + ] + ], + [ + 186, + [ + "memory[ap + 0] = 2370 <= memory[fp + -4]" + ] + ], + [ + 234, + [ + "memory[ap + 0] = segments.add()" + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x36fbc999025b89d36d31dc2f9c0a03b4377755e1f27e0e42a385aaba90f61a6", + "offset": 0, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} \ No newline at end of file diff --git a/starknet_programs/raw_contract_classes/fibonacci.sierra b/starknet_programs/raw_contract_classes/fibonacci.sierra new file mode 100644 index 000000000..8cd932a4e --- /dev/null +++ b/starknet_programs/raw_contract_classes/fibonacci.sierra @@ -0,0 +1,373 @@ +{ + "sierra_program": [ + "0x1", + "0x2", + "0x0", + "0x2", + "0x0", + "0x0", + "0xd5", + "0x2b", + "0x16", + "0x52616e6765436865636b", + "0x0", + "0x4761734275696c74696e", + "0x66656c74323532", + "0x4172726179", + "0x1", + "0x2", + "0x536e617073686f74", + "0x3", + "0x537472756374", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x4", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x456e756d", + "0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511", + "0x6", + "0x753332", + "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972", + "0x4275696c74696e436f737473", + "0x17bc4bcbb517b92736828af382c42b71df97fe5d0a8db42d13069b34a1ddbe9", + "0x14de46c93830b854d231d540339ee8ae16bb18830a375fe81572a472d5945f1", + "0xd", + "0x2f528e3c691e195fca674982b69c0dc4284f206c3ea4d680220e99b59315a92", + "0xc", + "0xe", + "0x5", + "0x19b3b4955bdcfa379bfc5a4949111c4efdd79128f8676f4d0895419b22e2ad7", + "0x10", + "0x53797374656d", + "0x426f78", + "0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7", + "0x13", + "0x4e6f6e5a65726f", + "0x50", + "0x7265766f6b655f61705f747261636b696e67", + "0x656e61626c655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x73746f72655f74656d70", + "0x66756e6374696f6e5f63616c6c", + "0x656e756d5f6d61746368", + "0x7", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f6c656e", + "0x736e617073686f745f74616b65", + "0x8", + "0x64726f70", + "0x7533325f636f6e7374", + "0x72656e616d65", + "0x7533325f6571", + "0x7374727563745f636f6e737472756374", + "0x656e756d5f696e6974", + "0x9", + "0x6a756d70", + "0x626f6f6c5f6e6f745f696d706c", + "0x6765745f6275696c74696e5f636f737473", + "0xa", + "0x77697468647261775f6761735f616c6c", + "0x64697361626c655f61705f747261636b696e67", + "0xb", + "0xf", + "0x61727261795f6e6577", + "0x11", + "0x12", + "0x66656c743235325f636f6e7374", + "0x4f7574206f6620676173", + "0x61727261795f617070656e64", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x14", + "0x756e626f78", + "0x647570", + "0x66656c743235325f69735f7a65726f", + "0x15", + "0x66656c743235325f616464", + "0x66656c743235325f737562", + "0x122", + "0xffffffffffffffff", + "0xad", + "0x9d", + "0x8c", + "0x7a", + "0x17", + "0x18", + "0x19", + "0x1a", + "0x1b", + "0x1c", + "0x1d", + "0x1e", + "0x1f", + "0x21", + "0x20", + "0x22", + "0x25", + "0x23", + "0x24", + "0x26", + "0x65", + "0x27", + "0x28", + "0x29", + "0x2a", + "0x54", + "0x2b", + "0x2c", + "0x2d", + "0x2e", + "0x2f", + "0x33", + "0x34", + "0x35", + "0x36", + "0x37", + "0x38", + "0x30", + "0x31", + "0x32", + "0x39", + "0x4d", + "0x3a", + "0x3b", + "0x3c", + "0x3d", + "0x3e", + "0x41", + "0x42", + "0x3f", + "0x40", + "0x43", + "0x44", + "0x45", + "0x46", + "0x47", + "0x48", + "0x49", + "0x4a", + "0x4b", + "0x4c", + "0x4e", + "0x4f", + "0x51", + "0x52", + "0x53", + "0x55", + "0x56", + "0x57", + "0x58", + "0x59", + "0x5a", + "0x5d", + "0x5b", + "0x5c", + "0x5e", + "0x5f", + "0x60", + "0x61", + "0x62", + "0x63", + "0x64", + "0x66", + "0x67", + "0x68", + "0x69", + "0x6a", + "0x6b", + "0x6c", + "0x6d", + "0x6e", + "0x6f", + "0x70", + "0x71", + "0x72", + "0x73", + "0x74", + "0x75", + "0x76", + "0x77", + "0x78", + "0x79", + "0x7b", + "0x7c", + "0x7d", + "0x7e", + "0x7f", + "0x80", + "0x81", + "0x82", + "0x83", + "0x84", + "0x85", + "0x86", + "0x87", + "0x88", + "0x89", + "0x8a", + "0x8b", + "0x8d", + "0x8e", + "0x8f", + "0xc3", + "0xc8", + "0xd2", + "0x108", + "0xe9", + "0xfc", + "0x102", + "0xbc", + "0xd9", + "0x118", + "0x11e", + "0xa93", + "0x7060f02090e0d02060a0c060b02070a090606080706060502040203020100", + "0x2090a1502060a07060d02070a1402060a0213100610061202090e02111006", + "0x61e021d19061c061b02090e1a060d02070a190618061702090e090616060d", + "0x60906281a06062702260225022402232207060621100620061f02090e0706", + "0x60631020706302e06062f2e06062d0706062c1a06062b2a06062902060627", + "0x2370607350607340236350606270207350607341006063302322e0606272e", + "0x273c06062f3c06062d3c060633023b023a3906062702381006062f35060629", + "0x706062d0706063e1806062b3d06062907090628070606273c060627060606", + "0x607341c0606331a0606330906062f0906062d09090628090606270706062f", + "0x63316060633070606434207064106073f0607343f0606274006062702073f", + "0x6062702074706073407060646450706411a06062f440706410c0906281906", + "0x62702072a060734070606310706064847060629060747060734470606270c", + "0x3418060633024d06070641024c4b06062f024a0706064906072a0607342a06", + "0x4f06020602024f060202024e1006062706073d0607343d06062702073d0607", + "0x1a0239064f0609060c02024f060209022a1007501a0c074f07060207070202", + "0x4f060209021806513c064f0735062a020c064f060c061002352e074f063906", + "0x9023f06521c064f0719062a021916074f063d061a023d064f062e060c0202", + "0x6534b064f0720062a022040074f0647061a0247064f0616060c02024f0602", + "0x56074f065506390255064f065406350254064f0640062e02024f0602090200", + "0x24f0659063c025a59074f065806390258064f06021802024f0656063c0257", + "0x4f075c5b073d025b064f065b0619025c064f065a0616025b064f0657061602", + "0x64f065d0640025d064f065e063f025e064f06021c02024f06020902025d02", + "0x6400262064f066106470261064f06021c02024f060209020260060220025f", + "0x66463064f076006000260064f066006400260064f065f064b025f064f0662", + "0x570266064f066606560266064f06025502024f0663065402024f0602090265", + "0x64f06025902024f06025802024f060209026b6a07696867074f07661a0c09", + "0x4f0668065c026f064f0667061002024f066d065b026e6d074f066c065a026c", + "0x64b065d0273064f061c065d0272064f063c065d0271064f066e065e027006", + "0x9027a067978064f0777066102777675094f0674737271706f105f0274064f", + "0x665027e7d074f067b0663027c064f060260027b064f0678066202024f0602", + "0x28281074f06807f07670280064f067c0666027f064f067e065d02024f067d", + "0x285064f0684066b02024f0683066a028483074f0681066802024f06820654", + "0x89064f0676065c0288064f067506100287064f0686066d0286064f0685066c", + "0x67602024f060209028b8a89880c068b064f06870675028a064f0607066e02", + "0x75028e064f0607066e028d064f0676065c0279064f06750610028c064f067a", + "0x24f064b066502024f06025802024f06020902228e8d790c0622064f068c06", + "0x65d0290064f060277028f064f06026002024f063c066502024f061c066502", + "0x292064f06916907710269064f0602700291064f06908f076f0290064f0690", + "0x96064f0607066e0295064f066b065c0294064f066a06100293064f06920676", + "0x665065402024f06025802024f06020902979695940c0697064f0693067502", + "0x98064f0607066e02024f063c066502024f061c066502024f064b066502024f", + "0x29c064f060273029b064f06026002024f069a0654029a99074f0698067202", + "0x64f069d9e0771029e064f060270029d064f069c9b076f029c064f069c065d", + "0x4f0699066e0264064f061a065c02a1064f060c061002a0064f069f0676029f", + "0x65402024f06025802024f06020902a3a264a10c06a3064f06a0067502a206", + "0x64f06026002024f063c066502024f061c066502024f0640067402024f0600", + "0x64f06027002a6064f06a5a4076f02a5064f06a5065d02a5064f06027802a4", + "0x61a065c02aa064f060c061002a9064f06a8067602a8064f06a6a7077102a7", + "0x24f06020902adacabaa0c06ad064f06a9067502ac064f0607066e02ab064f", + "0x6026002024f063c066502024f0616067402024f063f065402024f06025802", + "0x6027002b0064f06afae076f02af064f06af065d02af064f06027802ae064f", + "0x65c02b4064f060c061002b3064f06b2067602b2064f06b0b1077102b1064f", + "0x6020902b653b5b40c06b6064f06b306750253064f0607066e02b5064f061a", + "0x7802b7064f06026002024f062e067402024f0618065402024f06025802024f", + "0x7102ba064f06027002b9064f06b8b7076f02b8064f06b8065d02b8064f0602", + "0xbe064f061a065c02bd064f060c061002bc064f06bb067602bb064f06b9ba07", + "0x25802024f06020902c0bfbebd0c06c0064f06bc067502bf064f0607066e02", + "0x64f06c2065d02c2064f06027702c1064f06026002024f0609067402024f06", + "0x6c5067602c5064f06c3c4077102c4064f06027002c3064f06c2c1076f02c2", + "0xc6067502c8064f0607066e02c7064f062a065c0252064f0610061002c6064f", + "0x20c06ca0907074f0706067a0206064f0602062e02c9c8c7520c06c9064f06", + "0x20022a064f061a067d0210064f0607067c021a064f0609067b02024f060209", + "0x4f060c067c0235064f062e067e022e064f06021c02024f0602090202cb0602", + "0x72a06810239064f0639060c0239064f0610066b022a064f0635067d021006", + "0x6800219064f0616067f0216064f063c068202024f060209021806cc3c064f", + "0x24f060209023f1c07063f064f063d0683021c064f0639060c023d064f0619", + "0x247064f0639060c0220064f064006840240064f06021c02024f0618065402", + "0x64f061006560210064f06025502024f060258024b4707064b064f06200683", + "0x3c1a074f061a068502024f06020902393507cd2e2a074f0710060209570210", + "0x24f061a066502024f060209021806ce024f073c0686022a064f062a061002", + "0x219064f062e065c0216064f062a061002024f0607065b02024f060c066502", + "0x60c068502024f0618068702024f0602090202cf060220023d064f0609065d", + "0x100220064f06401a078a0240064f060289021c064f063f090788023f0c074f", + "0x257064f060c065d0256064f0607065e0255064f062e065c0254064f062a06", + "0x2004b47094f06595857565554105f0259064f0620065d0258064f061c065d", + "0x64f06470610025c064f065a066202024f060209025b06d05a064f07000661", + "0x4f065e068c025e064f063d068b023d064f065c065d0219064f064b065c0216", + "0x62615f090662064f065d06790261064f0619065c025f064f06160610025d06", + "0x265064f064b065c0263064f064706100260064f065b068d02024f06020902", + "0x4f0607065b02024f060c066502024f06020902666563090666064f06600679", + "0x5d0268064f0602770267064f06026002024f061a066502024f060906650202", + "0x6c064f066a6b0771026b064f060270026a064f066867076f0268064f066806", + "0x64f066d06790275064f0639065c026e064f06350610026d064f066c068d02", + "0x20c064f06021c0209064f060706076f0207064f0602067f0276756e090676", + "0x602066e0206064f06021c02101a070610064f060c068e021a064f06090666", + "0x2090706023f4006020c1a4006020c1a0907070609064f0606068e0207064f", + "0x100907090707d21a0c090706023d0602090707073c060210d1022a1a071a06", + "0xd4021040074006d30602" + ], + "sierra_program_debug_info": { + "type_names": [], + "libfunc_names": [], + "user_func_names": [] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x112e35f48499939272000bd72eb840e502ca4c3aefa8800992e8defb746e0c9", + "function_idx": 0 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": [ + { + "type": "impl", + "name": "Fibonacci", + "interface_name": "fibonacci::fibonacci::IFibonacci" + }, + { + "type": "interface", + "name": "fibonacci::fibonacci::IFibonacci", + "items": [ + { + "type": "function", + "name": "fib", + "inputs": [ + { + "name": "a", + "type": "core::felt252" + }, + { + "name": "b", + "type": "core::felt252" + }, + { + "name": "n", + "type": "core::felt252" + } + ], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "fibonacci::fibonacci::Fibonacci::Event", + "kind": "enum", + "variants": [] + } + ] +} \ No newline at end of file diff --git a/tests/cairo_1_syscalls.rs b/tests/cairo_1_syscalls.rs index 9e7cc02a3..6d322fb44 100644 --- a/tests/cairo_1_syscalls.rs +++ b/tests/cairo_1_syscalls.rs @@ -270,7 +270,7 @@ fn library_call() { let mut resources_manager = ExecutionResourcesManager::default(); let expected_execution_resources = ExecutionResources { #[cfg(not(feature = "cairo_1_tests"))] - n_steps: 255, + n_steps: 247, #[cfg(feature = "cairo_1_tests")] n_steps: 259, n_memory_holes: 8, @@ -278,7 +278,7 @@ fn library_call() { }; let expected_execution_resources_internal_call = ExecutionResources { #[cfg(not(feature = "cairo_1_tests"))] - n_steps: 84, + n_steps: 80, #[cfg(feature = "cairo_1_tests")] n_steps: 85, n_memory_holes: 5, @@ -294,7 +294,7 @@ fn library_call() { entry_point_type: Some(EntryPointType::External), calldata, retdata: [5.into()].to_vec(), - execution_resources: expected_execution_resources, + execution_resources: Some(expected_execution_resources), class_hash: Some(class_hash), internal_calls: vec![CallInfo { caller_address: Address(0.into()), @@ -310,7 +310,7 @@ fn library_call() { entry_point_type: Some(EntryPointType::External), calldata: vec![25.into()], retdata: [5.into()].to_vec(), - execution_resources: expected_execution_resources_internal_call, + execution_resources: Some(expected_execution_resources_internal_call), class_hash: Some(lib_class_hash), gas_consumed: 0, ..Default::default() @@ -321,7 +321,7 @@ fn library_call() { storage_read_values: vec![], accessed_storage_keys: HashSet::new(), #[cfg(not(feature = "cairo_1_tests"))] - gas_consumed: 78650, + gas_consumed: 78250, #[cfg(feature = "cairo_1_tests")] gas_consumed: 78980, ..Default::default() @@ -733,6 +733,7 @@ fn deploy_cairo1_from_cairo1() { let ret_casm_class = match state.get_contract_class(&ret_class_hash).unwrap() { CompiledClass::Casm(class) => class.as_ref().clone(), CompiledClass::Deprecated(_) => unreachable!(), + CompiledClass::Sierra(_) => unreachable!(), }; assert_eq!(ret_casm_class, test_contract_class); @@ -832,6 +833,7 @@ fn deploy_cairo0_from_cairo1_without_constructor() { let ret_class_hash = state.get_class_hash_at(&ret_address).unwrap(); let ret_casm_class = match state.get_contract_class(&ret_class_hash).unwrap() { CompiledClass::Deprecated(class) => class.as_ref().clone(), + CompiledClass::Sierra(_) => unreachable!(), CompiledClass::Casm(_) => unreachable!(), }; @@ -932,6 +934,7 @@ fn deploy_cairo0_from_cairo1_with_constructor() { let ret_casm_class = match state.get_contract_class(&ret_class_hash).unwrap() { CompiledClass::Deprecated(class) => class.as_ref().clone(), CompiledClass::Casm(_) => unreachable!(), + CompiledClass::Sierra(_) => unreachable!(), }; assert_eq!(ret_casm_class, test_contract_class); @@ -1032,6 +1035,7 @@ fn deploy_cairo0_and_invoke() { let ret_casm_class = match state.get_contract_class(&ret_class_hash).unwrap() { CompiledClass::Deprecated(class) => class.as_ref().clone(), CompiledClass::Casm(_) => unreachable!(), + CompiledClass::Sierra(_) => unreachable!(), }; assert_eq!(ret_casm_class, test_contract_class); @@ -1142,8 +1146,18 @@ fn test_send_message_to_l1_syscall() { payload: vec![555.into(), 666.into()], }]; + #[cfg(not(feature = "cairo_1_tests"))] + let expected_n_steps = 46; + #[cfg(feature = "cairo_1_tests")] + let expected_n_steps = 50; + + #[cfg(not(feature = "cairo_1_tests"))] + let expected_gas_consumed = 9640; + #[cfg(feature = "cairo_1_tests")] + let expected_gas_consumed = 10040; + let expected_execution_resources = ExecutionResources { - n_steps: 50, + n_steps: expected_n_steps, n_memory_holes: 0, builtin_instance_counter: HashMap::from([(RANGE_CHECK_BUILTIN_NAME.to_string(), 2)]), }; @@ -1156,8 +1170,8 @@ fn test_send_message_to_l1_syscall() { entry_point_selector: Some(external_entrypoint_selector.into()), entry_point_type: Some(EntryPointType::External), l2_to_l1_messages, - execution_resources: expected_execution_resources, - gas_consumed: 10040, + execution_resources: Some(expected_execution_resources), + gas_consumed: expected_gas_consumed, ..Default::default() }; @@ -1236,8 +1250,18 @@ fn test_get_execution_info() { address.0.clone(), ]; + #[cfg(not(feature = "cairo_1_tests"))] + let expected_n_steps = 213; + #[cfg(feature = "cairo_1_tests")] + let expected_n_steps = 268; + + #[cfg(not(feature = "cairo_1_tests"))] + let expected_gas_consumed = 22980; + #[cfg(feature = "cairo_1_tests")] + let expected_gas_consumed = 28580; + let expected_execution_resources = ExecutionResources { - n_steps: 268, + n_steps: expected_n_steps, n_memory_holes: 4, builtin_instance_counter: HashMap::from([(RANGE_CHECK_BUILTIN_NAME.to_string(), 4)]), }; @@ -1250,8 +1274,8 @@ fn test_get_execution_info() { entry_point_selector: Some(external_entrypoint_selector.into()), entry_point_type: Some(EntryPointType::External), retdata: expected_ret_data, - execution_resources: expected_execution_resources, - gas_consumed: 28580, + execution_resources: Some(expected_execution_resources), + gas_consumed: expected_gas_consumed, ..Default::default() }; diff --git a/tests/cairo_native.rs b/tests/cairo_native.rs new file mode 100644 index 000000000..f9171100c --- /dev/null +++ b/tests/cairo_native.rs @@ -0,0 +1,923 @@ +#![cfg(not(feature = "cairo_1_tests"))] + +#[cfg(feature = "cairo-native")] +use crate::CallType::Call; +#[cfg(feature = "cairo-native")] +use cairo_vm::felt::Felt252; +#[cfg(feature = "cairo-native")] +use num_bigint::BigUint; +#[cfg(feature = "cairo-native")] +use num_traits::Zero; +#[cfg(feature = "cairo-native")] +use starknet_in_rust::definitions::block_context::BlockContext; +#[cfg(feature = "cairo-native")] +use starknet_in_rust::execution::{Event, OrderedEvent}; +#[cfg(feature = "cairo-native")] +use starknet_in_rust::services::api::contract_classes::compiled_class::CompiledClass; +#[cfg(feature = "cairo-native")] +use starknet_in_rust::CasmContractClass; +#[cfg(feature = "cairo-native")] +use starknet_in_rust::EntryPointType::{self, External}; +#[cfg(feature = "cairo-native")] +use starknet_in_rust::{ + definitions::constants::TRANSACTION_VERSION, + execution::{ + execution_entry_point::ExecutionEntryPoint, CallInfo, CallType, TransactionExecutionContext, + }, + state::cached_state::CachedState, + state::{in_memory_state_reader::InMemoryStateReader, ExecutionResourcesManager}, + utils::{Address, ClassHash}, +}; +#[cfg(feature = "cairo-native")] +use std::collections::HashMap; +#[cfg(feature = "cairo-native")] +use std::collections::HashSet; +#[cfg(feature = "cairo-native")] +use std::sync::Arc; +#[cfg(feature = "cairo-native")] +use starknet_api::block::Block; + +#[test] +#[cfg(feature="cairo-native")] +fn get_block_hash_test() { + + let sierra_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/get_block_hash_basic.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + let native_entrypoints = sierra_contract_class.clone().entry_points_by_type; + let native_entrypoint_selector = &native_entrypoints.external.get(0).unwrap().selector; + + // Create state reader with class hash data + let mut contract_class_cache = HashMap::new(); + + let native_class_hash: ClassHash = [1; 32]; + + let caller_address = Address(123456789.into()); + + contract_class_cache.insert( + native_class_hash, + CompiledClass::Sierra(Arc::new(sierra_contract_class)), + ); + + let mut state_reader = InMemoryStateReader::default(); + let nonce = Felt252::zero(); + + state_reader + .address_to_nonce_mut() + .insert(caller_address.clone(), nonce); + + // Create state from the state_reader and contract cache. + let mut state = CachedState::new(Arc::new(state_reader), contract_class_cache); + + /* + 1 recipient + */ + + let calldata = [ + 10.into() + ] + .to_vec(); + + let native_result = execute( + &mut state, + &caller_address, + &caller_address, + native_entrypoint_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + +} + +#[test] +#[cfg(feature = "cairo-native")] +fn integration_test_erc20() { + let sierra_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/erc20.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + let casm_data = include_bytes!("../starknet_programs/cairo2/erc20.casm"); + let casm_contract_class: CasmContractClass = serde_json::from_slice(casm_data).unwrap(); + + let native_entrypoints = sierra_contract_class.clone().entry_points_by_type; + let native_constructor_selector = &native_entrypoints.constructor.get(0).unwrap().selector; + + let casm_entrypoints = casm_contract_class.clone().entry_points_by_type; + let casm_constructor_selector = &casm_entrypoints.constructor.get(0).unwrap().selector; + + // Create state reader with class hash data + let mut contract_class_cache = HashMap::new(); + + let native_class_hash: ClassHash = [1; 32]; + let casm_class_hash: ClassHash = [2; 32]; + + let caller_address = Address(123456789.into()); + + contract_class_cache.insert( + native_class_hash, + CompiledClass::Sierra(Arc::new(sierra_contract_class)), + ); + contract_class_cache.insert( + casm_class_hash, + CompiledClass::Casm(Arc::new(casm_contract_class)), + ); + let mut state_reader = InMemoryStateReader::default(); + let nonce = Felt252::zero(); + + state_reader + .address_to_class_hash_mut() + .insert(caller_address.clone(), casm_class_hash); + state_reader + .address_to_nonce_mut() + .insert(caller_address.clone(), nonce); + + // Create state from the state_reader and contract cache. + let mut state = CachedState::new(Arc::new(state_reader), contract_class_cache); + + /* + 1 recipient + 2 name + 3 decimals + 4 initial_supply + 5 symbol + */ + let calldata = [ + caller_address.0.clone(), + 2.into(), + 3.into(), + 4.into(), + 5.into(), + ] + .to_vec(); + + let vm_result = execute( + &mut state, + &caller_address, + &caller_address, + casm_constructor_selector, + &calldata, + EntryPointType::Constructor, + &casm_class_hash, + ); + + let native_result = execute( + &mut state, + &caller_address, + &caller_address, + native_constructor_selector, + &calldata, + EntryPointType::Constructor, + &native_class_hash, + ); + + assert_eq!(vm_result.caller_address, caller_address); + assert_eq!(vm_result.call_type, Some(CallType::Delegate)); + assert_eq!(vm_result.contract_address, caller_address); + assert_eq!( + vm_result.entry_point_selector, + Some(Felt252::new(casm_constructor_selector)) + ); + assert_eq!( + vm_result.entry_point_type, + Some(EntryPointType::Constructor) + ); + assert_eq!(vm_result.calldata, calldata); + assert!(!vm_result.failure_flag); + assert_eq!(vm_result.retdata, [].to_vec()); + assert_eq!(vm_result.class_hash, Some(casm_class_hash)); + + assert_eq!(native_result.caller_address, caller_address); + assert_eq!(native_result.call_type, Some(CallType::Delegate)); + assert_eq!(native_result.contract_address, caller_address); + assert_eq!( + native_result.entry_point_selector, + Some(Felt252::new(native_constructor_selector)) + ); + assert_eq!( + native_result.entry_point_type, + Some(EntryPointType::Constructor) + ); + assert_eq!(native_result.calldata, calldata); + assert!(!native_result.failure_flag); + assert_eq!(native_result.retdata, [].to_vec()); + assert_eq!(native_result.execution_resources, None); + assert_eq!(native_result.class_hash, Some(native_class_hash)); + assert_eq!(native_result.gas_consumed, 0); + + assert_eq!(vm_result.events, native_result.events); + assert_eq!( + vm_result.accessed_storage_keys, + native_result.accessed_storage_keys + ); + assert_eq!(vm_result.l2_to_l1_messages, native_result.l2_to_l1_messages); + // TODO: Make these asserts work + // assert_eq!(vm_result.execution_resources, native_result.execution_resources); + // assert_eq!(vm_result.gas_consumed, native_result.gas_consumed); + + // --------------- GET TOTAL SUPPLY ----------------- + + let native_get_total_supply_selector = &native_entrypoints.external.get(5).unwrap().selector; + let casm_get_total_supply_selector = &casm_entrypoints.external.get(5).unwrap().selector; + + let calldata = [].to_vec(); + + let vm_result = execute( + &mut state, + &caller_address, + &caller_address, + casm_get_total_supply_selector, + &calldata, + EntryPointType::External, + &casm_class_hash, + ); + + let native_result = execute( + &mut state, + &caller_address, + &caller_address, + native_get_total_supply_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!vm_result.failure_flag); + assert_eq!(vm_result.retdata, [4.into()].to_vec()); + + assert!(!native_result.failure_flag); + assert_eq!(native_result.retdata, [4.into()].to_vec()); + + assert_eq!(vm_result.events, native_result.events); + assert_eq!( + vm_result.accessed_storage_keys, + native_result.accessed_storage_keys + ); + assert_eq!(vm_result.l2_to_l1_messages, native_result.l2_to_l1_messages); + // TODO: Make these asserts work + // assert_eq!(vm_result.execution_resources, native_result.execution_resources); + // assert_eq!(vm_result.gas_consumed, native_result.gas_consumed); + + // ---------------- GET DECIMALS ---------------------- + + let native_get_decimals_selector = &native_entrypoints.external.get(1).unwrap().selector; + let casm_get_decimals_selector = &casm_entrypoints.external.get(1).unwrap().selector; + let calldata = [].to_vec(); + + let vm_result = execute( + &mut state, + &caller_address, + &caller_address, + casm_get_decimals_selector, + &calldata, + EntryPointType::External, + &casm_class_hash, + ); + + let native_result = execute( + &mut state, + &caller_address, + &caller_address, + native_get_decimals_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!vm_result.failure_flag); + assert_eq!(vm_result.retdata, [3.into()].to_vec()); + + assert!(!native_result.failure_flag); + assert_eq!(native_result.retdata, [3.into()].to_vec()); + + assert_eq!(vm_result.events, native_result.events); + assert_eq!( + vm_result.accessed_storage_keys, + native_result.accessed_storage_keys + ); + assert_eq!(vm_result.l2_to_l1_messages, native_result.l2_to_l1_messages); + // TODO: Make these asserts work + // assert_eq!(vm_result.execution_resources, native_result.execution_resources); + // assert_eq!(vm_result.gas_consumed, native_result.gas_consumed); + + // ---------------- GET NAME ---------------------- + + let get_name_selector = &native_entrypoints.external.get(6).unwrap().selector; + + let calldata = [].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + get_name_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [2.into()].to_vec()); + + // ---------------- GET SYMBOL ---------------------- + + let get_symbol_selector = &native_entrypoints.external.get(7).unwrap().selector; + + let calldata = [].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + get_symbol_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [5.into()].to_vec()); + + // ---------------- GET BALANCE OF CALLER ---------------------- + + let balance_of_selector = &native_entrypoints.external.get(8).unwrap().selector; + + let calldata = [caller_address.0.clone()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + balance_of_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [4.into()].to_vec()); + + // ---------------- ALLOWANCE OF ADDRESS 1 ---------------------- + + let allowance_entry_point_selector = &native_entrypoints.external.get(3).unwrap().selector; + let calldata = [caller_address.0.clone(), 1.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + allowance_entry_point_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [0.into()].to_vec()); + + // ---------------- INCREASE ALLOWANCE OF ADDRESS 1 by 10_000 ---------------------- + + let increase_allowance_entry_point_selector = + &native_entrypoints.external.get(2).unwrap().selector; + let calldata = [1.into(), 10_000.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + increase_allowance_entry_point_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [].to_vec()); + + // ---------------- ALLOWANCE OF ADDRESS 1 ---------------------- + + let calldata = [caller_address.0.clone(), 1.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + allowance_entry_point_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert_eq!(result.retdata, [10_000.into()].to_vec()); + + // ---------------- APPROVE ADDRESS 1 TO MAKE TRANSFERS ON BEHALF OF THE CALLER ---------------------- + + let approve_entry_point_selector = &native_entrypoints.external.get(4).unwrap().selector; + + let calldata = [1.into(), 5_000.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + approve_entry_point_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [].to_vec()); + + // ---------------- TRANSFER 3 TOKENS FROM CALLER TO ADDRESS 2 --------- + + let balance_of_selector = &native_entrypoints.external.get(0).unwrap().selector; + + let calldata = [2.into(), 3.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + balance_of_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [].to_vec()); + + // ---------------- GET BALANCE OF CALLER ---------------------- + + let balance_of_selector = &native_entrypoints.external.get(8).unwrap().selector; + + let calldata = [caller_address.0.clone()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + balance_of_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [1.into()].to_vec()); + + // ---------------- GET BALANCE OF ADDRESS 2 ---------------------- + + let balance_of_selector = &native_entrypoints.external.get(8).unwrap().selector; + + let calldata = [2.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + balance_of_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [3.into()].to_vec()); + + // ---------------- TRANSFER 1 TOKEN FROM CALLER TO ADDRESS 2, CALLED FROM ADDRESS 1 ---------------------- + + let transfer_from_selector = &native_entrypoints.external.get(9).unwrap().selector; + + let calldata = [1.into(), 2.into(), 1.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + transfer_from_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [].to_vec()); + + // ---------------- GET BALANCE OF ADDRESS 2 ---------------------- + + let balance_of_selector = &native_entrypoints.external.get(8).unwrap().selector; + + let calldata = [2.into()].to_vec(); + + let result = execute( + &mut state, + &caller_address, + &caller_address, + balance_of_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + assert_eq!(result.retdata, [4.into()].to_vec()); + + // ---------------- GET BALANCE OF CALLER ---------------------- + + let balance_of_selector = &native_entrypoints.external.get(8).unwrap().selector; + + let calldata = [caller_address.0.clone()].to_vec(); + + let _result = execute( + &mut state, + &caller_address, + &caller_address, + balance_of_selector, + &calldata, + EntryPointType::External, + &native_class_hash, + ); + + assert!(!result.failure_flag); + + // TODO: This assert is failing. For some reason, tokens are not deducted from the caller's balance + // after the transfer_from. Check the cairo code to see if the bug is over there. + // assert_eq!(result.retdata, [0.into()].to_vec()); +} + +#[test] +#[cfg(feature = "cairo-native")] +fn call_contract_test() { + // Caller contract + let caller_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/caller.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + // Callee contract + let callee_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/callee.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + // Caller contract entrypoints + let caller_entrypoints = caller_contract_class.clone().entry_points_by_type; + let call_contract_selector = &caller_entrypoints.external.get(0).unwrap().selector; + + // Callee contract entrypoints + let callee_entrypoints = callee_contract_class.clone().entry_points_by_type; + let fn_selector = &callee_entrypoints.external.get(0).unwrap().selector; + + // Create state reader with class hash data + let mut contract_class_cache = HashMap::new(); + + // Caller contract data + let caller_address = Address(1111.into()); + let caller_class_hash: ClassHash = [1; 32]; + let caller_nonce = Felt252::zero(); + + // Callee contract data + let callee_address = Address(1112.into()); + let callee_class_hash: ClassHash = [2; 32]; + let callee_nonce = Felt252::zero(); + + contract_class_cache.insert( + caller_class_hash, + CompiledClass::Sierra(Arc::new(caller_contract_class)), + ); + contract_class_cache.insert( + callee_class_hash, + CompiledClass::Sierra(Arc::new(callee_contract_class)), + ); + + let mut state_reader = InMemoryStateReader::default(); + + // Insert caller contract info into state reader + state_reader + .address_to_class_hash_mut() + .insert(caller_address.clone(), caller_class_hash); + state_reader + .address_to_nonce_mut() + .insert(caller_address.clone(), caller_nonce); + + // Insert callee contract info into state reader + state_reader + .address_to_class_hash_mut() + .insert(callee_address.clone(), callee_class_hash); + state_reader + .address_to_nonce_mut() + .insert(callee_address.clone(), callee_nonce); + + // Create state from the state_reader and contract cache. + let mut state = CachedState::new(Arc::new(state_reader), contract_class_cache); + + let calldata = [fn_selector.into()].to_vec(); + let result = execute( + &mut state, + &caller_address, + &callee_address, + call_contract_selector, + &calldata, + EntryPointType::External, + &caller_class_hash, + ); + + assert_eq!(result.retdata, [Felt252::new(44)]); +} + +#[test] +#[cfg(feature = "cairo-native")] +fn call_echo_contract_test() { + // Caller contract + let caller_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/echo_caller.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + // Callee contract + let callee_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/echo.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + // Caller contract entrypoints + let caller_entrypoints = caller_contract_class.clone().entry_points_by_type; + let call_contract_selector = &caller_entrypoints.external.get(0).unwrap().selector; + + // Callee contract entrypoints + let callee_entrypoints = callee_contract_class.clone().entry_points_by_type; + let fn_selector = &callee_entrypoints.external.get(0).unwrap().selector; + + // Create state reader with class hash data + let mut contract_class_cache = HashMap::new(); + + // Caller contract data + let caller_address = Address(1111.into()); + let caller_class_hash: ClassHash = [1; 32]; + let caller_nonce = Felt252::zero(); + + // Callee contract data + let callee_address = Address(1112.into()); + let callee_class_hash: ClassHash = [2; 32]; + let callee_nonce = Felt252::zero(); + + contract_class_cache.insert( + caller_class_hash, + CompiledClass::Sierra(Arc::new(caller_contract_class)), + ); + + contract_class_cache.insert( + callee_class_hash, + CompiledClass::Sierra(Arc::new(callee_contract_class)), + ); + + let mut state_reader = InMemoryStateReader::default(); + + // Insert caller contract info into state reader + state_reader + .address_to_class_hash_mut() + .insert(caller_address.clone(), caller_class_hash); + state_reader + .address_to_nonce_mut() + .insert(caller_address.clone(), caller_nonce); + + // Insert callee contract info into state reader + state_reader + .address_to_class_hash_mut() + .insert(callee_address.clone(), callee_class_hash); + state_reader + .address_to_nonce_mut() + .insert(callee_address.clone(), callee_nonce); + + // Create state from the state_reader and contract cache. + let mut state = CachedState::new(Arc::new(state_reader), contract_class_cache); + + let calldata = [fn_selector.into(), 99999999.into()].to_vec(); + let result = execute( + &mut state, + &caller_address, + &callee_address, + call_contract_selector, + &calldata, + EntryPointType::External, + &caller_class_hash, + ); + + assert_eq!(result.retdata, [Felt252::new(99999999)]); +} + +#[test] +#[cfg(feature = "cairo-native")] +fn call_events_contract_test() { + // Caller contract + let caller_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/caller.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + // Callee contract + let callee_contract_class: cairo_lang_starknet::contract_class::ContractClass = + serde_json::from_str( + std::fs::read_to_string("starknet_programs/cairo2/event_emitter.sierra") + .unwrap() + .as_str(), + ) + .unwrap(); + + // Caller contract entrypoints + let caller_entrypoints = caller_contract_class.clone().entry_points_by_type; + let call_contract_selector = &caller_entrypoints.external.get(0).unwrap().selector; + + // Event emmitter contract entrypoints + let callee_entrypoints = callee_contract_class.clone().entry_points_by_type; + let fn_selector = &callee_entrypoints.external.get(0).unwrap().selector; + + // Create state reader with class hash data + let mut contract_class_cache = HashMap::new(); + + // Caller contract data + let caller_address = Address(1111.into()); + let caller_class_hash: ClassHash = [1; 32]; + let caller_nonce = Felt252::zero(); + + // Callee contract data + let callee_address = Address(1112.into()); + let callee_class_hash: ClassHash = [2; 32]; + let callee_nonce = Felt252::zero(); + + contract_class_cache.insert( + caller_class_hash, + CompiledClass::Sierra(Arc::new(caller_contract_class)), + ); + + contract_class_cache.insert( + callee_class_hash, + CompiledClass::Sierra(Arc::new(callee_contract_class)), + ); + + let mut state_reader = InMemoryStateReader::default(); + + // Insert caller contract info into state reader + state_reader + .address_to_class_hash_mut() + .insert(caller_address.clone(), caller_class_hash); + state_reader + .address_to_nonce_mut() + .insert(caller_address.clone(), caller_nonce); + + // Insert callee contract info into state reader + state_reader + .address_to_class_hash_mut() + .insert(callee_address.clone(), callee_class_hash); + state_reader + .address_to_nonce_mut() + .insert(callee_address.clone(), callee_nonce); + + // Create state from the state_reader and contract cache. + let mut state = CachedState::new(Arc::new(state_reader), contract_class_cache); + + let calldata = [fn_selector.into()].to_vec(); + let result = execute( + &mut state, + &caller_address, + &callee_address, + call_contract_selector, + &calldata, + EntryPointType::External, + &caller_class_hash, + ); + + let internal_call = CallInfo { + caller_address: Address(1111.into()), + call_type: Some(Call), + contract_address: Address(1112.into()), + code_address: None, + class_hash: Some([ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, + ]), + entry_point_selector: Some(fn_selector.into()), + entry_point_type: Some(External), + calldata: Vec::new(), + retdata: vec![1234.into()], + execution_resources: None, + events: vec![OrderedEvent { + order: 0, + keys: vec![110.into()], + data: vec![1.into()], + }], + l2_to_l1_messages: Vec::new(), + storage_read_values: Vec::new(), + accessed_storage_keys: HashSet::new(), + internal_calls: Vec::new(), + gas_consumed: 0, + failure_flag: false, + }; + + let event = Event { + from_address: Address(1112.into()), + keys: vec![110.into()], + data: vec![1.into()], + }; + + assert_eq!(result.retdata, [1234.into()]); + assert_eq!(result.events, []); + assert_eq!(result.internal_calls, [internal_call]); + + let sorted_events = result.get_sorted_events().unwrap(); + assert_eq!(sorted_events, vec![event]); +} + +#[cfg(feature = "cairo-native")] +fn execute( + state: &mut CachedState, + caller_address: &Address, + callee_address: &Address, + selector: &BigUint, + calldata: &[Felt252], + entrypoint_type: EntryPointType, + class_hash: &ClassHash, +) -> CallInfo { + use std::default::Default; + + use sha3::digest::block_buffer::Block; + use starknet_api::{block::{self, BlockHeader}, hash::{StarkFelt, StarkHash}}; + + + let exec_entry_point = ExecutionEntryPoint::new( + (*callee_address).clone(), + calldata.to_vec(), + Felt252::new(selector), + (*caller_address).clone(), + entrypoint_type, + Some(CallType::Delegate), + Some(*class_hash), + u128::MAX, + ); + + // Execute the entrypoint + // Todo: Insert block with custom adress and custom hash to check is obtained correctly + + /*let mut block = Block { + header: BlockHeader { + block_hash: StarkHash::new(10.into()), + ..Default::default() + }, + ..Default::default() + }; + + let mut block_context = BlockContext::default(); + block_context.blocks_mut().insert(10, Block::default()); + */ + + let mut tx_execution_context = TransactionExecutionContext::new( + Address(0.into()), + Felt252::zero(), + Vec::new(), + 0, + 10.into(), + block_context.invoke_tx_max_n_steps(), + TRANSACTION_VERSION.clone(), + ); + let mut resources_manager = ExecutionResourcesManager::default(); + + exec_entry_point + .execute( + state, + &block_context, + &mut resources_manager, + &mut tx_execution_context, + false, + block_context.invoke_tx_max_n_steps(), + ) + .unwrap() + .call_info + .unwrap() +} diff --git a/tests/complex_contracts/amm_contracts/amm.rs b/tests/complex_contracts/amm_contracts/amm.rs index a750eb3f8..0d7979c08 100644 --- a/tests/complex_contracts/amm_contracts/amm.rs +++ b/tests/complex_contracts/amm_contracts/amm.rs @@ -87,14 +87,14 @@ fn amm_init_pool_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: [].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 232, n_memory_holes: 20, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 14), (HASH_BUILTIN_NAME.to_string(), 2), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values: vec![Felt252::zero(), Felt252::zero()], @@ -173,14 +173,14 @@ fn amm_add_demo_tokens_test() { entry_point_selector: Some(add_demo_token_selector), entry_point_type: Some(EntryPointType::External), calldata: calldata_add_demo_token.clone(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 393, n_memory_holes: 44, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 20), (HASH_BUILTIN_NAME.to_string(), 8), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys: accessed_storage_keys_add_demo_token, storage_read_values: vec![ @@ -249,14 +249,14 @@ fn amm_get_pool_token_balance() { entry_point_selector: Some(get_pool_balance_selector), entry_point_type: Some(EntryPointType::External), calldata: calldata_get_pool_token_balance.clone(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 84, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 3), (HASH_BUILTIN_NAME.to_string(), 1), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys: accessed_storage_keys_get_pool_token_balance, storage_read_values: vec![10000.into()], @@ -341,14 +341,14 @@ fn amm_swap_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata_swap.clone(), retdata: expected_return, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 820, n_memory_holes: 95, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 41), (HASH_BUILTIN_NAME.to_string(), 14), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values: [ @@ -576,14 +576,14 @@ fn amm_get_account_token_balance_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata_get_balance, retdata: expected_return, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 92, n_memory_holes: 11, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 3), (HASH_BUILTIN_NAME.to_string(), 2), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values: [10.into()].to_vec(), diff --git a/tests/complex_contracts/amm_contracts/amm_proxy.rs b/tests/complex_contracts/amm_contracts/amm_proxy.rs index b4196d833..45612b7a1 100644 --- a/tests/complex_contracts/amm_contracts/amm_proxy.rs +++ b/tests/complex_contracts/amm_contracts/amm_proxy.rs @@ -75,14 +75,14 @@ fn amm_proxy_init_pool_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone()[1..].to_vec(), retdata: [].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 232, n_memory_holes: 20, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 2), ("range_check_builtin".to_string(), 14), ]), - }, + }), class_hash: Some(contract_class_hash), accessed_storage_keys, storage_read_values: vec![Felt252::zero(), Felt252::zero()], @@ -97,14 +97,14 @@ fn amm_proxy_init_pool_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: [].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 280, n_memory_holes: 20, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 2), ("range_check_builtin".to_string(), 14), ]), - }, + }), class_hash: Some(proxy_class_hash), internal_calls, ..Default::default() @@ -180,14 +180,14 @@ fn amm_proxy_get_pool_token_balance_test() { calldata: calldata.clone()[1..].to_vec(), retdata: [555.into()].to_vec(), storage_read_values: [555.into()].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 84, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 1), ("range_check_builtin".to_string(), 3), ]), - }, + }), class_hash: Some(contract_class_hash), accessed_storage_keys, ..Default::default() @@ -201,14 +201,14 @@ fn amm_proxy_get_pool_token_balance_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: [555.into()].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 140, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 1), ("range_check_builtin".to_string(), 3), ]), - }, + }), class_hash: Some(proxy_class_hash), internal_calls, ..Default::default() @@ -291,14 +291,14 @@ fn amm_proxy_add_demo_token_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone()[1..].to_vec(), storage_read_values: vec![0.into(), 0.into(), 0.into(), 0.into()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 397, n_memory_holes: 42, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 8), ("range_check_builtin".to_string(), 20), ]), - }, + }), class_hash: Some(contract_class_hash), accessed_storage_keys, ..Default::default() @@ -311,14 +311,14 @@ fn amm_proxy_add_demo_token_test() { entry_point_selector: Some(amm_proxy_entrypoint_selector), entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 445, n_memory_holes: 42, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 8), ("range_check_builtin".to_string(), 20), ]), - }, + }), class_hash: Some(proxy_class_hash), internal_calls, ..Default::default() @@ -413,14 +413,14 @@ fn amm_proxy_get_account_token_balance() { calldata: calldata.clone()[1..].to_vec(), retdata: [200.into()].to_vec(), storage_read_values: [200.into()].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 92, n_memory_holes: 11, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 2), ("range_check_builtin".to_string(), 3), ]), - }, + }), class_hash: Some(contract_class_hash), accessed_storage_keys, ..Default::default() @@ -434,14 +434,14 @@ fn amm_proxy_get_account_token_balance() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: [200.into()].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 151, n_memory_holes: 11, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 2), ("range_check_builtin".to_string(), 3), ]), - }, + }), class_hash: Some(proxy_class_hash), internal_calls, ..Default::default() @@ -553,14 +553,14 @@ fn amm_proxy_swap() { 1000.into(), ] .to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 826, n_memory_holes: 92, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 14), ("range_check_builtin".to_string(), 41), ]), - }, + }), class_hash: Some(contract_class_hash), accessed_storage_keys, ..Default::default() @@ -574,14 +574,14 @@ fn amm_proxy_swap() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: expected_result, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 885, n_memory_holes: 92, builtin_instance_counter: HashMap::from([ ("pedersen_builtin".to_string(), 14), ("range_check_builtin".to_string(), 41), ]), - }, + }), class_hash: Some(proxy_class_hash), internal_calls, ..Default::default() diff --git a/tests/complex_contracts/nft/erc721.rs b/tests/complex_contracts/nft/erc721.rs index 0961d9ff8..5c9e0590d 100644 --- a/tests/complex_contracts/nft/erc721.rs +++ b/tests/complex_contracts/nft/erc721.rs @@ -131,14 +131,14 @@ fn erc721_balance_of_test() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: expected_read_result.clone(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 105, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 3), (HASH_BUILTIN_NAME.to_string(), 1), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values: expected_read_result, @@ -210,14 +210,14 @@ fn erc721_test_owner_of() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: expected_read_result.clone(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 116, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 5), (HASH_BUILTIN_NAME.to_string(), 2), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values: expected_read_result, @@ -306,14 +306,14 @@ fn erc721_test_get_approved() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: expected_read_result, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 192, n_memory_holes: 20, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 8), (HASH_BUILTIN_NAME.to_string(), 4), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values, @@ -405,14 +405,14 @@ fn erc721_test_is_approved_for_all() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: expected_read_result, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 101, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 3), (HASH_BUILTIN_NAME.to_string(), 2), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values, @@ -505,14 +505,14 @@ fn erc721_test_approve() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: expected_read_result, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 332, n_memory_holes: 30, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 13), (HASH_BUILTIN_NAME.to_string(), 6), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values, @@ -600,14 +600,14 @@ fn erc721_set_approval_for_all() { entry_point_type: Some(EntryPointType::External), calldata: calldata.clone(), retdata: expected_read_result, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 154, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 3), (HASH_BUILTIN_NAME.to_string(), 2), ]), - }, + }), class_hash: Some(class_hash), accessed_storage_keys, storage_read_values, @@ -747,14 +747,14 @@ fn erc721_transfer_from_test() { accessed_storage_keys, storage_read_values: expected_read_values, events: expected_events, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 1131, n_memory_holes: 117, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 53), (HASH_BUILTIN_NAME.to_string(), 16), ]), - }, + }), ..Default::default() }; @@ -835,14 +835,14 @@ fn erc721_transfer_from_and_get_owner_test() { class_hash: Some(class_hash), accessed_storage_keys, storage_read_values: expected_read_result, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 116, n_memory_holes: 10, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 5), (HASH_BUILTIN_NAME.to_string(), 2), ]), - }, + }), ..Default::default() }; diff --git a/tests/deploy_account.rs b/tests/deploy_account.rs index fd30b7c89..62c4b2f56 100644 --- a/tests/deploy_account.rs +++ b/tests/deploy_account.rs @@ -171,7 +171,7 @@ fn internal_deploy_account_cairo1() { let n_steps; #[cfg(not(feature = "cairo_1_tests"))] { - n_steps = 3948; + n_steps = 3936; } #[cfg(feature = "cairo_1_tests")] { @@ -189,7 +189,7 @@ fn internal_deploy_account_cairo1() { )), code_address: None, #[cfg(not(feature="cairo_1_tests"))] - gas_consumed: 16440, + gas_consumed: 15540, #[cfg(feature="cairo_1_tests")] gas_consumed: 16770, class_hash: Some([ @@ -206,9 +206,9 @@ fn internal_deploy_account_cairo1() { 2.into() ], retdata: vec![felt_str!("370462705988")], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { #[cfg(not(feature="cairo_1_tests"))] - n_steps: 152, + n_steps: 144, #[cfg(feature="cairo_1_tests")] n_steps: 155, n_memory_holes: 17, @@ -219,7 +219,7 @@ fn internal_deploy_account_cairo1() { .into_iter() .map(|(k, v)| (k.to_string(), v)) .collect(), - }, + }), ..Default::default() }), @@ -236,14 +236,14 @@ fn internal_deploy_account_cairo1() { entry_point_selector: Some(felt_str!("1159040026212278395030414237414753050475174923702621880048416706425641521556")), entry_point_type: Some(EntryPointType::Constructor), #[cfg(not(feature="cairo_1_tests"))] - gas_consumed: 14240, + gas_consumed: 13840, #[cfg(feature="cairo_1_tests")] gas_consumed: 14350, calldata: vec![2.into()], accessed_storage_keys: keys, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { #[cfg(not(feature="cairo_1_tests"))] - n_steps: 92, + n_steps: 88, #[cfg(feature="cairo_1_tests")] n_steps: 93, n_memory_holes: 0, @@ -254,7 +254,7 @@ fn internal_deploy_account_cairo1() { .into_iter() .map(|(k, v)| (k.to_string(), v)) .collect(), - }, + }), ..Default::default() }), None, diff --git a/tests/fibonacci.rs b/tests/fibonacci.rs index 827c7935d..b9798e1e9 100644 --- a/tests/fibonacci.rs +++ b/tests/fibonacci.rs @@ -112,10 +112,10 @@ fn integration_test() { calldata, retdata: [144.into()].to_vec(), class_hash: Some(class_hash), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 94, ..Default::default() - }, + }), ..Default::default() }; @@ -205,13 +205,13 @@ fn integration_test_cairo1() { entry_point_type: Some(EntryPointType::External), calldata, retdata: [144.into()].to_vec(), - execution_resources: ExecutionResources { - n_steps: 418, + execution_resources: Some(ExecutionResources { + n_steps: 414, n_memory_holes: 0, builtin_instance_counter: HashMap::from([(RANGE_CHECK_BUILTIN_NAME.to_string(), 15)]), - }, + }), class_hash: Some(class_hash), - gas_consumed: 35220, + gas_consumed: 34820, ..Default::default() }; diff --git a/tests/increase_balance.rs b/tests/increase_balance.rs index 678182e5d..698b6aa95 100644 --- a/tests/increase_balance.rs +++ b/tests/increase_balance.rs @@ -122,10 +122,10 @@ fn hello_starknet_increase_balance() { entry_point_type: Some(EntryPointType::External), calldata, retdata: [].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 65, ..Default::default() - }, + }), class_hash: Some(class_hash), accessed_storage_keys: expected_accessed_storage_keys, storage_read_values: expected_storage_read_values, diff --git a/tests/internals.rs b/tests/internals.rs index 7d6d6ab92..aeac40706 100644 --- a/tests/internals.rs +++ b/tests/internals.rs @@ -406,10 +406,10 @@ fn expected_validate_call_info( // Entries **not** in blockifier. class_hash: Some(felt_to_hash(&TEST_ACCOUNT_CONTRACT_CLASS_HASH)), call_type: Some(CallType::Call), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 13, ..Default::default() - }, + }), ..Default::default() } @@ -476,14 +476,14 @@ fn expected_fee_transfer_call_info( Felt252::zero(), Felt252::zero(), ], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 529, n_memory_holes: 57, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 21), (HASH_BUILTIN_NAME.to_string(), 4), ]), - }, + }), ..Default::default() } } @@ -619,14 +619,14 @@ fn expected_fee_transfer_info(fee: u128) -> CallInfo { entry_point_type: Some(EntryPointType::External), calldata: vec![Felt252::from(4096), Felt252::from(fee), Felt252::zero()], retdata: vec![Felt252::from(1)], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 525, n_memory_holes: 59, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 21), (HASH_BUILTIN_NAME.to_string(), 4), ]), - }, + }), l2_to_l1_messages: vec![], internal_calls: vec![], events: vec![OrderedEvent { @@ -683,14 +683,14 @@ fn expected_fib_fee_transfer_info(fee: u128) -> CallInfo { entry_point_type: Some(EntryPointType::External), calldata: vec![Felt252::from(4096), Felt252::from(fee), Felt252::zero()], retdata: vec![Felt252::from(1)], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 525, n_memory_holes: 59, builtin_instance_counter: HashMap::from([ ("range_check_builtin".to_string(), 21), ("pedersen_builtin".to_string(), 4), ]), - }, + }), l2_to_l1_messages: vec![], internal_calls: vec![], events: vec![OrderedEvent { @@ -754,7 +754,7 @@ fn declare_tx() -> Declare { fn declarev2_tx() -> DeclareV2 { #[cfg(not(feature = "cairo_1_tests"))] - let program_data = include_bytes!("../starknet_programs/cairo2/fibonacci.sierra"); + let program_data = include_bytes!("../starknet_programs/raw_contract_classes/fibonacci.sierra"); #[cfg(feature = "cairo_1_tests")] let program_data = include_bytes!("../starknet_programs/cairo1/fibonacci.sierra"); let sierra_contract_class: SierraContractClass = serde_json::from_slice(program_data).unwrap(); @@ -870,14 +870,14 @@ fn expected_declare_fee_transfer_info(fee: u128) -> CallInfo { ], ]), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 525, n_memory_holes: 59, builtin_instance_counter: HashMap::from([ (RANGE_CHECK_BUILTIN_NAME.to_string(), 21), (HASH_BUILTIN_NAME.to_string(), 4), ]), - }, + }), ..Default::default() } } @@ -949,10 +949,10 @@ fn test_declare_tx() { entry_point_selector: Some(VALIDATE_DECLARE_ENTRY_POINT_SELECTOR.clone()), entry_point_type: Some(EntryPointType::External), calldata: vec![TEST_EMPTY_CONTRACT_CLASS_HASH.clone()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 12, ..Default::default() - }, + }), ..Default::default() }), None, @@ -1046,10 +1046,10 @@ fn test_declarev2_tx() { entry_point_selector: Some(VALIDATE_DECLARE_ENTRY_POINT_SELECTOR.clone()), entry_point_type: Some(EntryPointType::External), calldata: vec![contract_hash], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 12, ..Default::default() - }, + }), ..Default::default() }), None, @@ -1103,18 +1103,18 @@ fn expected_execute_call_info() -> CallInfo { internal_calls: vec![], contract_address: TEST_CONTRACT_ADDRESS.clone(), code_address: None, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 22, ..Default::default() - }, + }), ..Default::default() }], events: vec![], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 61, n_memory_holes: 0, builtin_instance_counter: HashMap::from([(RANGE_CHECK_BUILTIN_NAME.to_string(), 1)]), - }, + }), ..Default::default() } } @@ -1146,14 +1146,14 @@ fn expected_fib_execute_call_info() -> CallInfo { Felt252::from(0), ], retdata: vec![Felt252::from(42)], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { #[cfg(not(feature = "cairo_1_tests"))] - n_steps: 157, + n_steps: 153, #[cfg(feature = "cairo_1_tests")] n_steps: 160, n_memory_holes: 0, builtin_instance_counter: HashMap::from([("range_check_builtin".to_string(), 4)]), - }, + }), l2_to_l1_messages: vec![], internal_calls: vec![CallInfo { caller_address: TEST_ACCOUNT_CONTRACT_ADDRESS.clone(), @@ -1169,17 +1169,17 @@ fn expected_fib_execute_call_info() -> CallInfo { contract_address: TEST_FIB_CONTRACT_ADDRESS.clone(), code_address: None, #[cfg(not(feature = "cairo_1_tests"))] - gas_consumed: 4380, + gas_consumed: 3980, #[cfg(feature = "cairo_1_tests")] gas_consumed: 4710, - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { #[cfg(not(feature = "cairo_1_tests"))] - n_steps: 118, + n_steps: 114, #[cfg(feature = "cairo_1_tests")] n_steps: 121, n_memory_holes: 0, builtin_instance_counter: HashMap::from([("range_check_builtin".to_string(), 3)]), - }, + }), ..Default::default() }], events: vec![], @@ -1205,11 +1205,11 @@ fn expected_validate_call_info_2() -> CallInfo { Felt252::from(1), Felt252::from(2), ], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 21, n_memory_holes: 0, builtin_instance_counter: HashMap::from([(RANGE_CHECK_BUILTIN_NAME.to_string(), 1)]), - }, + }), ..Default::default() } } @@ -1230,11 +1230,11 @@ fn expected_fib_validate_call_info_2() -> CallInfo { Felt252::from(0), Felt252::from(0), ], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 21, n_memory_holes: 0, builtin_instance_counter: HashMap::from([("range_check_builtin".to_string(), 1)]), - }, + }), ..Default::default() } } @@ -1264,7 +1264,7 @@ fn expected_fib_transaction_execution_info( let n_steps; #[cfg(not(feature = "cairo_1_tests"))] { - n_steps = 4231; + n_steps = 4227; } #[cfg(feature = "cairo_1_tests")] { @@ -2115,19 +2115,19 @@ fn test_library_call_with_declare_v2() { entry_point_selector: Some(external_entrypoint_selector.into()), entry_point_type: Some(EntryPointType::External), #[cfg(not(feature = "cairo_1_tests"))] - gas_consumed: 30080, + gas_consumed: 29680, #[cfg(feature = "cairo_1_tests")] gas_consumed: 30410, calldata: vec![1.into(), 1.into(), 10.into()], retdata: vec![89.into()], // fib(10) - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { #[cfg(not(feature = "cairo_1_tests"))] - n_steps: 368, + n_steps: 364, #[cfg(feature = "cairo_1_tests")] n_steps: 371, n_memory_holes: 0, builtin_instance_counter: HashMap::from([("range_check_builtin".to_string(), 13)]), - }, + }), ..Default::default() }; @@ -2139,19 +2139,19 @@ fn test_library_call_with_declare_v2() { entry_point_selector: Some(external_entrypoint_selector.into()), entry_point_type: Some(EntryPointType::External), #[cfg(not(feature = "cairo_1_tests"))] - gas_consumed: 112490, + gas_consumed: 111690, #[cfg(feature = "cairo_1_tests")] gas_consumed: 113480, calldata, retdata: vec![89.into()], // fib(10) - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { #[cfg(not(feature = "cairo_1_tests"))] - n_steps: 578, + n_steps: 570, #[cfg(feature = "cairo_1_tests")] n_steps: 587, n_memory_holes: 1, builtin_instance_counter: HashMap::from([("range_check_builtin".to_string(), 16)]), - }, + }), internal_calls: vec![expected_internal_call_info], ..Default::default() }; diff --git a/tests/storage.rs b/tests/storage.rs index b75a55ba6..d009992d5 100644 --- a/tests/storage.rs +++ b/tests/storage.rs @@ -119,10 +119,10 @@ fn integration_storage_test() { entry_point_type: Some(EntryPointType::External), calldata, retdata: [42.into()].to_vec(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 68, ..Default::default() - }, + }), class_hash: Some(class_hash), storage_read_values: vec![0.into(), 42.into()], accessed_storage_keys: expected_accessed_storage_keys, diff --git a/tests/syscalls.rs b/tests/syscalls.rs index 6672c7d5e..3ba0e1d5a 100644 --- a/tests/syscalls.rs +++ b/tests/syscalls.rs @@ -172,7 +172,7 @@ fn test_contract<'a>( assert_eq!(result.calldata, calldata); assert_eq!(result.retdata, return_data.into()); assert_eq!(result.internal_calls, internal_calls.into()); - assert_eq!(result.execution_resources, execution_resources); + assert_eq!(result.execution_resources, Some(execution_resources)); assert_eq!(result.gas_consumed, 0); assert!(!result.failure_flag); @@ -214,10 +214,10 @@ fn call_contract_syscall() { entry_point_type: Some(EntryPointType::External), calldata: vec![21.into(), 2.into()], retdata: vec![42.into()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 24, ..Default::default() - }, + }), ..Default::default() }, CallInfo { @@ -236,10 +236,10 @@ fn call_contract_syscall() { ]] .into_iter() .collect(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 63, ..Default::default() - }, + }), ..Default::default() }, CallInfo { @@ -253,10 +253,10 @@ fn call_contract_syscall() { entry_point_type: Some(EntryPointType::External), calldata: vec![], retdata: vec![2222.into()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 26, ..Default::default() - }, + }), ..Default::default() }, ], @@ -706,11 +706,11 @@ fn library_call_syscall() { entry_point_type: Some(EntryPointType::External), calldata: vec![21.into(), 2.into()], retdata: vec![42.into()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 24, n_memory_holes: 0, builtin_instance_counter: HashMap::default(), - }, + }), ..Default::default() }, CallInfo { @@ -729,11 +729,11 @@ fn library_call_syscall() { ]] .into_iter() .collect(), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 63, n_memory_holes: 0, builtin_instance_counter: HashMap::default(), - }, + }), ..Default::default() }, CallInfo { @@ -747,11 +747,11 @@ fn library_call_syscall() { entry_point_type: Some(EntryPointType::External), calldata: vec![], retdata: vec![1111.into()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 26, n_memory_holes: 0, builtin_instance_counter: HashMap::default(), - }, + }), ..Default::default() }, ], @@ -801,10 +801,10 @@ fn library_call_l1_handler_syscall() { .into_iter() .collect(), storage_read_values: vec![0.into()], - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 40, ..Default::default() - }, + }), ..Default::default() }], [], @@ -1001,10 +1001,10 @@ fn test_deploy_and_call_contract_syscall() { retdata: vec![(constructor_constant.clone() * Felt252::new(4))], storage_read_values: vec![constructor_constant.clone()], accessed_storage_keys: HashSet::from([constant_storage_key]), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 52, ..Default::default() - }, + }), ..Default::default() }, // Invoke storage_var_and_constructor.cairo set_constant function @@ -1026,10 +1026,10 @@ fn test_deploy_and_call_contract_syscall() { retdata: vec![], storage_read_values: vec![constructor_constant], accessed_storage_keys: HashSet::from([constant_storage_key]), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 40, ..Default::default() - }, + }), ..Default::default() }, // Invoke storage_var_and_constructor.cairo get_constant function @@ -1051,10 +1051,10 @@ fn test_deploy_and_call_contract_syscall() { retdata: vec![new_constant.clone()], storage_read_values: vec![new_constant.clone()], accessed_storage_keys: HashSet::from([constant_storage_key]), - execution_resources: ExecutionResources { + execution_resources: Some(ExecutionResources { n_steps: 46, ..Default::default() - }, + }), ..Default::default() } ], [new_constant], @@ -1163,6 +1163,7 @@ fn deploy_cairo1_from_cairo0_with_constructor() { let ret_casm_class = match state.get_contract_class(&ret_class_hash).unwrap() { CompiledClass::Casm(class) => class.as_ref().clone(), CompiledClass::Deprecated(_) => unreachable!(), + CompiledClass::Sierra(_) => unreachable!(), }; assert_eq!(ret_casm_class, test_contract_class); @@ -1267,6 +1268,7 @@ fn deploy_cairo1_from_cairo0_without_constructor() { let ret_casm_class = match state.get_contract_class(&ret_class_hash).unwrap() { CompiledClass::Casm(class) => class.as_ref().clone(), CompiledClass::Deprecated(_) => unreachable!(), + CompiledClass::Sierra(_) => unreachable!(), }; assert_eq!(ret_casm_class, test_contract_class); @@ -1369,6 +1371,7 @@ fn deploy_cairo1_and_invoke() { let ret_casm_class = match state.get_contract_class(&ret_class_hash).unwrap() { CompiledClass::Casm(class) => class.as_ref().clone(), CompiledClass::Deprecated(_) => unreachable!(), + CompiledClass::Sierra(_) => unreachable!(), }; assert_eq!(ret_casm_class, test_contract_class);